proc를 쓰실려면 마지막(실행파일 만들때)에 오라클 라이브러리를 링크 시켜줘야 합니다.
즉
cc dbtest.c -o dbtes.o -L$ORACLE_HOME/lib -lclntsh
이런식으로요... 그런데 일일이 nm으로 필요한 라이브러리에서 function을 찾을 수
없으므로 다음과 같이 한번 해보시기 바랍니다.
$ORACLE_HOME/rdbms/demo/demo_rdbms.mk 파일을 이용해야 하는데여..
우선 $ORACLE_HOME/rdbms/demo로 가서
make -f demo_rdbms.mk cdemo1 > cflags.mk
하게되면 컴파일되는 과정이 cflags.mk로 저장이 되니까(물론 link되는 라이브까지)
-Lxxx -lxxx
위와 같은 부분만 편집해서 붙이면 됩니다.(물론 Makefile을 만들어서 넣어줘야)
서현수 님께서 쓰시길::
> proc dbtest.pc하면
>
> #include <stdio.h>부분에서 다른 inclue화일을 참조 할수 없다구 에러가 떨어져서..
>
> 주석으로 막구 다시
>
> proc dbtest.pc하면 정상적으로 됩니다.
>
> 그런데 cc dbtest.c -o dbtes.o하면
>
> /tmp/ccfpuo3S.o: In function `main':
> /tmp/ccfpuo3S.o(.text+0x1d3): undefined reference to `sqlcxt'
> /tmp/ccfpuo3S.o(.text+0x266): undefined reference to `sqlcxt'
> /tmp/ccfpuo3S.o(.text+0x2fa): undefined reference to `sqlcxt'
> /tmp/ccfpuo3S.o: In function `get_data':
> /tmp/ccfpuo3S.o(.text+0x4ae): undefined reference to `sqlcxt'
> collect2: ld returned 1 exit status
>
> 이렇게 에러 메시지가 떨어지는 군요...
>
> 그래서 다 주석으로 막구..다시
>
> cc dbtest.c -o dbtes.o하면
>
> 정상적으로 됩니다.
>
> 그런데...
>
> 실제로 실행 결과값이..(null)이 나오네여...
>
> 어떻게...된건지.....좀....
>
> 소스를..올리께요....
>
> ===============================================================================
> /*
> File Name : dbtest.pc
> Description : Connect to Oracle DB,
> then get the corresponding emp data to the user inputted
> emp number
> */
>
> /*#include <stdio.h>*/
>
> /* 선언부 */
> EXEC SQL BEGIN DECLARE SECTION;
> VARCHAR user_id[20];
> VARCHAR passwd[20];
> int var_number;
> VARCHAR var_name[20];
> EXEC SQL END DECLARE SECTION;
>
> /* 포함부 */
> EXEC SQL INCLUDE SQLCA;
>
> /* 프로그램 함수 선언 */
> void get_data();
>
> main()
> {
> /*printf("\n Enter User ID :");
> scanf("%s", user_id.arr);
> printf("\n Enter Password :");
> scanf("%s", passwd.arr);*/
>
> sprintf(user_id.arr,"%s","scott");
> sprintf(passwd.arr,"%s","tiger");
> 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()
> {
> /*printf("\n Enter Employee Number to Query:");
> scanf("%d", &var_number);*/
> var_number=10;
>
> /* 데이터 처리부 */
> EXEC SQL SELECT name INTO :var_name FROM test WHERE num = :var_number;
>
> printf("\n Employee %d :", var_number);
> printf(" Name : %s", var_name);
> printf("\n");
> }
>
> ===============================================================================
> SQL> desc test
> Name Null? Type
> ------------------------------- -------- ----
> NUM NUMBER
> NAME VARCHAR2(20)
>
> SQL>
> SQL> select * from test;
>
> NUM NAME
> ---------- --------------------
> 10 서현수
>
> SQL>
|