- Użyj narzędzia $ORACLE_HOME/bin/relink, aby wygenerować bibliotekę o nazwie
libclntst.a
st
oznacza bibliotekę statyczną. Klient Oracle nie jest zwykle dostarczany z tym plikiem. - Spróbuj połączyć swoją aplikację z tą biblioteką. Najprawdopodobniej brakuje wielu symboli.
- Użyj narzędzia nm, aby znaleźć źródło brakujących symboli.
-
W przypadku 11gR2 ta komenda zadziałała dla mnie:
/usr/bin/c++ -Wall -ggdb3 -fPIC \ CMakeFiles/opassgen.dir/opassgen.cpp.o \ CMakeFiles/opassgen.dir/dbutils.cpp.o \ CMakeFiles/opassgen.dir/common.cpp.o \ CMakeFiles/opassgen.dir/crypto.cpp.o \ n.o -o opassgen \ -rdynamic -static-libgcc -L. -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic \ /home/oracle/ivan/openssl-1.0.1t/libcrypto.a \ /oracle/u01/db/11.2.0.4/lib/libclntst11.a \ /oracle/u01/db/11.2.0.4/lib/libippdcmerged.a \ /oracle/u01/db/11.2.0.4/lib/libippsmerged.a \ -Wl,--whole-archive libtrotl.a -Wl,--no-whole-archive \ -lpthread -ldl
Łączenie statyczne wymaga ręcznego rozwiązania wszystkich zależności. W tym przykładzie libclntst11.a zależy od symboli z libippdcmerged.a i libippsmerged.a.
W starszej wersji Oracle cała baza danych była kompilowana i linkowana za pomocą kompilatora ICC firmy Intel. Tak więc przy statycznym łączeniu biblioteki klienta Oracle trzeba było również dodać kilka statycznych bibliotek ze środowiska wykonawczego ICC.