- $ ORACLE_HOME / bin / relinkツールを使用して、
libclntst.a
という名前のライブラリを生成します。st
静的ライブラリの略です。 Oracleクライアントは通常、このファイルに同梱されていません。 - アプリをこのライブラリにリンクしてみてください。おそらく多くのシンボルが欠落していることに気付くでしょう。
- nmツールを使用して、欠落しているシンボルのソースを見つけます。
-
11gR2の場合、このコマンドは私のために機能しました:
/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
静的リンクでは、すべての依存関係を手動で解決する必要があります。この例では、libclntst11.aはlibippdcmerged.aおよびlibippsmerged.aのシンボルに依存しています。
古いバージョンのOracleでは、データベース全体がIntelのICCコンパイラを使用して構築およびリンクされていました。したがって、Oracleのクライアントライブラリを静的にリンクする場合は、ICCのランタイムからいくつかの静的ライブラリも追加する必要がありました。