Maison > développement back-end > Golang > le corps du texte

Comment résoudre les erreurs de liaison statique avec les bibliothèques Oracle dans les applications CGO ?

Patricia Arquette
Libérer: 2024-11-20 22:01:13
original
726 Les gens l'ont consulté

How to Resolve Static Linking Errors with Oracle Libraries in CGO Applications?

Résolution du problème de bibliothèque Oracle statique pour l'exécutable CGO

Présentation du problème :

Lors de la compilation d'un Allez dans l'application avec CGO activé et les bibliothèques Oracle, des erreurs se produisent lors du lien statique. Plus précisément, l'éditeur de liens GCC ne trouve pas la bibliothèque Oracle requise, libclntsh. Malgré la spécification du chemin de la bibliothèque lors de la compilation, le problème persiste.

Solution :

Suivez ces étapes pour résoudre le problème :

  1. Générer la bibliothèque Libclntst : Exécutez l'outil genclntst situé dans le répertoire bin d'Oracle pour créer une version statique de libclntst : $ORACLE_HOME/bin/genclntst.
  2. Lien vers la bibliothèque générée : Recompilez l'application et liez-la à la bibliothèque libclntst nouvellement générée.
  3. Identifiez les symboles manquants : Utilisez l'outil nm pour analyser les erreurs de l'éditeur de liens et identifier les symboles manquants.
  4. Résoudre les symboles restants : Dans certains cas, des bibliothèques statiques supplémentaires peuvent être nécessaires pour résoudre les symboles manquants. Pour les anciennes versions d'Oracle, celles-ci peuvent inclure des bibliothèques d'exécution ICC.

Exemple :

Pour 11gR2, la commande suivante résout le problème :

/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
Copier après la connexion

N'oubliez pas que la résolution manuelle des dépendances est nécessaire lors d'une liaison statique. Dans cet exemple, libclntst11.a dépend de libippdcmerged.a et libippsmerged.a.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal