[질문] oracle pro*c 컴파일 문제입니다.

cjy1126의 이미지

proc proc.pc 를 하면, proc.c 와 proc.lis가 생깁니다.

gcc -o proc proc.pc 를 하면 proc.c:215: redefinition of `struct sqlca' 에러가 나옵니다. ㅜ.ㅜ

여기 저기 찾기를 3시간째... 답답하네요.

MAKE 파일로 만들라고 나오는데, MAKE 파일을 어떤식으로 작성하는지도 모르겠고, demo_proc.mk를 봐도 알아보지 못해서 수정도 못하네요.

조언 & 도움 부탁드리겠습니다.

밑에는 제가 쳤던 소스입니다.

===============================================
#include <stdio.h>
#include <sqlca.h>
#include <stdlib.h>

EXEC SQL BEGIN DECLARE SECTION;
        VARCHAR user_id[20];
        VARCHAR passwd[20];
        VARCHAR saddr[16];
EXEC SQL END DECLARE SECTION;

EXEC SQL INCLUDE SQLCA;

#define USERID "mini"
#define PASSWD "mini"

void get_data();

main()
{
        strcpy(user_id.arr, USERID);
        strcpy(passwd.arr, PASSWD);

        user_id.len = strlen(user_id.arr);
        passwd.len = strlen(passwd.arr);

        EXEC SQL CONNECT : user_id IDENTIFIED BY :passwd;

        if(sqlca.sqlcode<0)
        {
                printf("\n%s", sqlca.sqlerrm.sqlerrmc);
                EXEC SQL ROLLBACK WORK RELEASE;
                exit(1);
        }

        else
        {
                printf("\nConnected to Oracle.");
                EXEC SQL COMMIT WORK RELEASE;
                get_data();
        }
        exit(0);
}

void get_data()
{
        EXEC SQL SELECT SADDR INTO : saddr FROM SERVER;

        printf("\n 차단된 IP:");
        printf("\n %s", saddr);
}
sunyzero의 이미지

cjy1126 wrote:
proc proc.pc 를 하면, proc.c 와 proc.lis가 생깁니다.

gcc -o proc proc.pc 를 하면 proc.c:215: redefinition of `struct sqlca' 에러가 나옵니다. ㅜ.ㅜ

gcc 로 다시 pc를 컴파일하는 것은 아닙니다.

proc를 통해서 *.pc 가 *.c가 되고 이 *.c를 다시 gcc로 컴파일하시면 됩니다. 아래처럼 보면 proc로 sample.pc가 파싱되어서 sample.c가 나오고 이걸 다시 gcc로 컴파일하는 겁니다.

proc <options...> iname=sample oname=sample.c
gcc -o sample sample.c

========================================
* The truth will set you free.

nangchang의 이미지

아마 gcc proc.pc 라고 쓰신건 gcc proc.c를 오타로 잘못 쓰신거 같구요..

정확한 원인은 모르겠네요. 어떤 이유로 인해서 sqlca 스트럭쳐가 2번 정의

되었다는 것 말고는요...

흠.. 혹시나 #include<sqlca.h>를 빼면 될지도..-_-a

cjy1126의 이미지

아래와 같이 해결했습니다.

gcc -o test test.c -L/usr/oracle/product/8.1.7/lib/ -lclntsh `cat /usr/oracle/product/8.1.7/lib/sysliblist` -ldl -lm

gcc -o test test.c 로 잘되던게 왜 갑자기 이렇게 됐는지 모르겠지만요.

제가 makefile 만드는것과 내공이 약해서요.

도움 감사드립니다.

많은 공부했습니다. ^^

익명 사용자의 이미지

Makefile 단순하게 하나 만들어 봅니다.

PROC=proc
CC=gcc
PROCOPTS =
CFLAGS =
LDFLAGS = -L/usr/oracle/product/8.1.7/lib/ -lclntsh `cat /usr/oracle/product/8.1.7/lib/sysliblist` -ldl -lm

test: test.o
        gcc -o  test test.o $(LDFLAGS)

test.o: test.c
        gcc -Wall -c test.c

test.c: test.pc
        $(PROC) $(PROCOPTS) iname=test.pc oname=test.c

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.