Essayer de créer un exécutable CGO statique avec les bibliothèques Oracle sous Linux/Ubuntu : erreur inattendue
Problème :
Créer un un exécutable lié statiquement avec les bibliothèques CGO et Oracle sous Linux/Ubuntu entraîne une erreur lors de la construction processus, échouant spécifiquement à trouver la bibliothèque Oracle -lclntsh.
Solution :
-
Générer la bibliothèque statique (libclntst.a) :
a. Installez le package complet de la base de données Oracle si ce n'est déjà fait.
b. Exécutez $ORACLE_HOME/bin/genclntst pour générer la bibliothèque statique manquante libclntst12.a.
-
Lien avec la bibliothèque générée :
a. Modifiez votre commande build pour inclure la bibliothèque générée libclntst12.a.
b. Exemple : allez build -work -x -ldflags " -v -linkmode external -extldflags -static -L/usr/lib/oracle/12.1/client64/lib -lclntst12" ${MAIN_SRC}
-
Gérer les symboles manquants (le cas échéant) :
a. Utilisez ldd pour vérifier les symboles non résolus dans l'exécutable lié statiquement.
b. Utilisez nm pour trouver la source des symboles manquants dans les bibliothèques Oracle.
c. Créez un lien avec des bibliothèques supplémentaires pour résoudre les symboles manquants.
-
Remarques supplémentaires :
a. La liaison statique nécessite de résoudre toutes les dépendances manuellement.
b. Pour les anciennes versions d'Oracle, des bibliothèques statiques supplémentaires du runtime ICC peuvent être nécessaires.
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!