我無法在3.9.0版本編譯反對OCILIB(libocilib.a)一些代碼:不能編譯反對OCILIB
$ LS
libocilib.a ocilib.h test.c的$ gcc -o test -L。 -locilib test.c的
/tmp/cc4071VP.o:在功能 '主:
test.c的:(文本+ 0×27): 未定義參照 OCI_Initialize
test.c的:(文本+ 0x64 ):未定義 參照OCI_ConnectionCreate
test.c的:(文本+ 0x9d):未定義 參照OCI_StatementCreate
test.c的:(文本+ 0XAF):未定義 參照OCI_ExecuteStmt
test.c的:(.text + 0xb8):undefined 對OCI_GetResultset的引用
test.c :(.text + 0xcc) :未定義 參照OCI_GetString
test.c的:(文本+ 0xdd):未定義 參照OCI_FetchNext
test.c的:(文本+ 0xe6):未定義 參照OCI_Cleanup
collect2: LD返回1退出狀態
好的。在這種情況下:
$ strings libocilib.a | grep的 OCI_Initialize
OCI_Initialize
OCI_Initialize
OCI_Initialize
OCI_Initialize
有一個solution有關問題,他回答(文斯)本人在另一頁,但它不是爲我工作。
什麼DOES工作是當我嘗試編譯針對的.so:
$ LS
libocilib.so * libocilib.so.3 * libocilib.so.3.9.0 * OCILIB .h test.c$ gcc -o test -L。 -locilib test.c的
$
程序運行正常,以及(修改當然LD_LIBRARY_PATH,之後!)。
前面提到的解決方案包括一些定義-DOCI_IMPORT_LINKAGE
和-DOCI_CHARSET_ANSI
我試過用這兩種方法(儘管在線文檔中說DOCI_IMPORT_LINKAGE僅用於編譯庫本身時,我認爲它更多地涉及鏈接實際的oracle libs比它所需要的更多,它被試過了,沒有更多。說到這個,如果它有助於回答這個問題,那麼我編譯這個庫來進行運行時鏈接,已經將--with-oracle-import=runtime
標誌傳遞給了./configure。
另一方面,在Windows 32位上發生類似的情況。沒有問題與Windows 64.我可以鏈接並運行一個程序對我自己編譯的libocilib.lib就好了。
希望我已經提供了足夠的線索......任何人都知道我做錯了什麼?
在此先感謝幫助。
gcc -o test test.c -L。鏈接dl也需要-locilib -ldl 。 謝謝! – yggdrasil