- Sử dụng công cụ $ ORACLE_HOME / bin / relink để tạo thư viện có tên
libclntst.a
st
là viết tắt của thư viện tĩnh. Ứng dụng khách Oracle thường không được gửi cùng với tệp này. The - Cố gắng liên kết ứng dụng của bạn với thư viện này. Hầu hết bạn có thể sẽ tìm thấy nhiều biểu tượng bị thiếu.
- Sử dụng công cụ nm để tìm nguồn gốc của những ký hiệu bị thiếu đó.
-
Trong trường hợp 11gR2, lệnh này phù hợp với tôi:
/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
Liên kết tĩnh yêu cầu bạn giải quyết tất cả các phụ thuộc theo cách thủ công. Trong ví dụ này, libclntst11.a phụ thuộc vào các ký hiệu từ libippdcmerged.a và libippsmerged.a.
Trên phiên bản Oracle cũ hơn, toàn bộ cơ sở dữ liệu đã được xây dựng và liên kết bằng trình biên dịch ICC của Intel. Vì vậy, khi liên kết tĩnh client của Oracle, bạn cũng phải thêm một số lib tĩnh từ thời gian chạy của ICC.