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

Pourquoi ne puis-je pas lier statiquement mon application Go aux bibliothèques Oracle et comment puis-je y remédier ?

Susan Sarandon
Libérer: 2024-11-26 19:53:15
original
905 Les gens l'ont consulté

Why Can't I Statically Link My Go Application with Oracle Libraries, and How Can I Fix It?

Impossible de trouver la bibliothèque Oracle lors de la construction statique

Dans une tentative de création d'un exécutable Go statique avec les bibliothèques Oracle sur Ubuntu, des erreurs ont été rencontrées lors de la création d'un exécutable Go statique avec les bibliothèques Oracle sur Ubuntu. en essayant de les relier. Malgré des builds dynamiques réussis, le compilateur statique a signalé une incapacité à trouver la bibliothèque Oracle, malgré le fait que les fichiers requis étaient présents aux emplacements corrects.

Résolution

  1. Utilisez l'outil $ORACLE_HOME/bin/relink pour générer la bibliothèque libclntst.a, car les clients Oracle ne sont généralement pas livrés avec ce fichier. Cette bibliothèque statique contient des symboles manquants requis pour la liaison statique.
  2. Compilez l'application avec la bibliothèque libclntst.a. Vérifiez l'absence de symboles non résolus.
  3. Utilisez l'outil nm pour identifier la source de tout symbole manquant en suspens.
  4. À titre d'exemple, dans le cas d'Oracle 11gR2, la commande de compilation suivante a réussi résolu toutes les dépendances :
/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

Cette commande inclut des bibliothèques statiques supplémentaires pour résoudre les dépendances, notamment libippdcmerged.a et libippsmerged.a.

En résumé, les liens statiques nécessitent une résolution manuelle de toutes les dépendances, ce qui peut nécessiter l'inclusion de bibliothèques supplémentaires qui ne sont généralement pas incluses dans les liens dynamiques.

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