Maison > Article > développement back-end > Comment résoudre les erreurs de liaison statique lors de la connexion à une base de données Oracle dans CGO sous Linux/Ubuntu ?
Vous essayez de créer un binaire statique qui se connecte à une base de données Oracle mais rencontrez une erreur pendant la phase de liaison. Voici une analyse détaillée et une solution à votre problème :
/usr/bin/ld: cannot find -lclntsh
Cette erreur indique que le compilateur ne peut pas localiser la bibliothèque Oracle libclntsh.a.
Votre configuration inclut déjà la version dynamique de la bibliothèque (-L/usr/lib/oracle/12.1/client64/lib -lclntsh) pour les liens dynamiques, mais vous devez utiliser la version statique (.a) pour les liens statiques.
Pour créer un exécutable CGO statique avec les bibliothèques Oracle, vous devez suivre ces étapes :
Utilisez l'outil de relink d'Oracle : Utilisez l'outil $ORACLE_HOME/bin/relink pour générer la bibliothèque statique nommée libclntst.a :
$ORACLE_HOME/bin/relink all
Liez votre application avec libclntst.a : Essayez de lier votre application à la bibliothèque statique :
CGO_ENABLED=1 go build -work -x -ldflags " -v -linkmode external -extldflags -static" -L/usr/lib/oracle/12.1/client64/lib oracletest.go
Par exemple, ce qui suit La commande crée avec succès un exécutable lié statiquement sur 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
Construire statiquement les exécutables CGO liés aux bibliothèques Oracle peuvent être difficiles en raison des multiples dépendances des bibliothèques. En suivant les solutions fournies, vous pouvez générer avec succès un binaire statique qui se connecte à votre base de données Oracle.
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!