Oracle
 sql >> Base de données >  >> RDS >> Oracle

Essayer de créer un exécutable CGO statique avec des bibliothèques oracle sous Linux/Ubuntu

  • Utilisez l'outil $ORACLE_HOME/bin/relink pour générer la bibliothèque nommée libclntst.a Le st signifie bibliothèque statique. Le client Oracle n'est généralement pas livré avec ce fichier. Le
  • Essayez d'associer votre application à cette bibliothèque. Vous trouverez très probablement de nombreux symboles manquants.
  • Utilisez l'outil nm pour trouver la source de ces symboles manquants.
  • Dans le cas de 11gR2, cette commande a fonctionné pour moi :

    /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
    

La liaison statique nécessite que vous résolviez toutes les dépendances manuellement. Dans cet exemple, libclntst11.a dépend des symboles de libippdcmerged.a et libippsmerged.a.

Sur l'ancienne version d'Oracle, toute la base de données a été créée et liée à l'aide du compilateur ICC d'Intel. Ainsi, lors de la liaison statique de la bibliothèque client d'Oracle, vous deviez également ajouter des bibliothèques statiques à partir de l'environnement d'exécution d'ICC.