Oracle
 sql >> база данни >  >> RDS >> Oracle

Опитвам се да изградя статичен CGO изпълним файл с библиотеки на oracle на Linux/Ubuntu

  • Използвайте инструмента $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 цялата база данни беше изградена и свързана с помощта на ICC компилатора на Intel. Така че, когато свързвате статично клиентската библиотека на Oracle, вие също трябваше да добавите някои статични библиотеки от средата за изпълнение на ICC.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Отмяна на ангажирана транзакция

  2. Агрегация на низове на Oracle

  3. Низ за връзка на Oracle без файл tnsnames.ora

  4. Превод на Microsoft T-SQL към Oracle SQL

  5. Как да проверя дали даден масив съдържа определен низ?