У меня проблемы с компиляцией кода для ocilib (libocilib.a) в версии 3.9.0:
$ ls
libocilib.a ocilib.h test.c
$ gcc -o test -L.-locilib test.c
/tmp/cc4071VP.o: в функции `main ':
test.c :(. text + 0x27): неопределенная ссылка на OCI_Initialize
test.c :(. text +0x64): неопределенная ссылка на OCI_ConnectionCreate
test.c :(. Text + 0x9d): неопределенная ссылка на OCI_StatementCreate
test.c :(. Text + 0xaf): неопределенная ссылка на OCI_ExecuteStmt
test.c:(.text + 0xb8): неопределенная ссылка на OCI_GetResultset
test.c :(. text + 0xcc): неопределенная ссылка на OCI_GetString
test.c :(. text + 0xdd): неопределенная ссылка на OCI_FetchNext
test.c :(. text + 0xe6): неопределенная ссылка на OCI_Cleanup
collect2: ld вернул 1 состояние выхода
ОК.В этом случае:
$ strings libocilib.a |grep OCI_Initialize
OCI_Initialize
OCI_Initialize
OCI_Initialize
OCI_Initialize
Было решение для этой проблемы, на которое ответил человек (Винс)Сам на другой странице, но это не работает для меня.
Что ДЕЛАЕТ работает, когда я пытаюсь скомпилировать против .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 используется только при компиляции самой библиотеки. Я предположил, что это больше относится к компоновке реальных библиотек оракула, чем к ocilib.Это было опробовано, тем не менее.
Говоря о том, что, если это поможет ответить на вопрос, я скомпилировал библиотеку для связывания во время выполнения, передав флаг --with-oracle-import=runtime
в ./configure.
Еще одно замечание: что-то похожее происходит в 32-битной Windows. Никаких проблем с Windows 64. Я могу связать и запустить программу с моим собственным скомпилированным libocilib.lib просто отлично.
Надеюсь, у меня естьпредоставил достаточно подсказок ... кто-нибудь знает, что я делаю не так?
Заранее спасибо, помогите.