gpt4 book ai didi

无法针对 OCILIB 进行编译

转载 作者:太空宇宙 更新时间:2023-11-04 04:05:26 25 4
gpt4 key购买 nike

我在针对版本 3.9.0 上的 ocilib (libocilib.a) 编译一些代码时遇到问题:

$ ls
libocilib.a ocilib.h test.c

$ gcc -o test -L. -locilib test.c
/tmp/cc4071VP.o: In function `main':
test.c:(.text+0x27): undefined reference to OCI_Initialize
test.c:(.text+0x64): undefined reference to OCI_ConnectionCreate
test.c:(.text+0x9d): undefined reference to OCI_StatementCreate
test.c:(.text+0xaf): undefined reference to OCI_ExecuteStmt
test.c:(.text+0xb8): undefined reference to OCI_GetResultset
test.c:(.text+0xcc): undefined reference to OCI_GetString
test.c:(.text+0xdd): undefined reference to OCI_FetchNext
test.c:(.text+0xe6): undefined reference to OCI_Cleanup
collect2: ld returned 1 exit status

好的。在那种情况下:

$ strings libocilib.a | grep OCI_Initialize
OCI_Initialize
OCI_Initialize
OCI_Initialize
OCI_Initialize

有一个solution这个问题由那个人(文斯)自己在另一页上回答,但它对我不起作用。

当我尝试针对 .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 库的链接有关,而不是 ocilib。尽管如此,它还是被尝试过。

说到这里,如果它有助于回答问题,我将库编译为具有运行时链接,并将 --with-oracle-import=runtime 标志传递到 ./configure。

还有一个旁注,类似的事情发生在 Windows 32 位上。 Windows 64 没有问题。我可以针对我自己编译的 libocilib.lib 链接并运行程序。

希望我已经提供了足够的线索...有人知道我做错了什么吗?
在此先感谢帮助。

最佳答案

你试过这样链接吗?

gcc -o test test.c -L. -locilib

至少在过去(我很长一段时间没有做过多少 C/C++)链接的顺序很重要。 test.o 将引用 OCI_Initialize 并在 test.o 之后使用 libocilib.a,这些将得到满足。但是,如果您以其他方式链接,这些引用将不会得到满足,因为链接器在查看 test.o 之前看到了 OCI_Initialize 符号,因此从未意识到它需要保留查看 test.o 时指向周围符号的“指针”。

关于无法针对 OCILIB 进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6613728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com