- Gunakan alat $ORACLE_HOME/bin/relink untuk menghasilkan perpustakaan bernama
libclntst.a
st
singkatan dari perpustakaan statis. Klien Oracle biasanya tidak dikirimkan dengan file ini. - Coba tautkan aplikasi Anda dengan perpustakaan ini. Anda kemungkinan besar akan menemukan banyak simbol yang hilang.
- Gunakan alat nm untuk menemukan sumber simbol yang hilang itu.
-
Dalam kasus 11gR2 perintah ini bekerja untuk saya:
/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
Penautan statis mengharuskan Anda menyelesaikan semua dependensi secara manual. Dalam contoh ini libclntst11.a bergantung pada simbol dari libippdcmerged.a dan libippsmerged.a.
Pada versi Oracle yang lebih lama, seluruh basis data dibangun dan ditautkan menggunakan kompiler ICC Intel. Jadi ketika menautkan lib klien Oracle secara statis, Anda juga harus menambahkan beberapa lib statis dari runtime ICC.