Maison >développement back-end >Golang >Comment lier statiquement un exécutable Go CGO aux bibliothèques Oracle sous Linux ?

Comment lier statiquement un exécutable Go CGO aux bibliothèques Oracle sous Linux ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-25 10:50:11288parcourir

How to Statically Link a Go CGO Executable with Oracle Libraries on Linux?

Lien pour l'exécution statique de Go CGO exécutable avec les bibliothèques Oracle sous Linux

Énoncé du problème :

Création d'un Go de base L'interface de l'extrait de code avec une base de données Oracle échoue lors de la compilation statique à l'aide de l'option command :

CGO_ENABLED=1 go build -work -x -ldflags "-v -linkmode external -extldflags -static"  ${MAIN_SRC}

L'erreur de compilation indique que la bibliothèque Oracle -lclntsh est introuvable. Malgré les tentatives de définition de variables d'environnement et d'installation de fichiers supplémentaires à partir du package de base de données Oracle, la compilation statique échoue toujours.

Solution :

  1. Générer la bibliothèque statique :

    Oracle n'est généralement pas livré avec la bibliothèque statique libclntst.a. Pour le générer, exécutez la commande suivante :

    $ORACLE_HOME/bin/genclntst
  2. Liez l'application :

    Liez votre application à la bibliothèque statique générée :

    CGO_ENABLED=1 go build -work -x -ldflags "-v -linkmode external -extldflags -static -L/usr/lib/oracle/12.1/client64/lib -lclntsh -lclntst"  ${MAIN_SRC}
  3. Gérer les symboles manquants (Facultatif) :

    S'il manque encore des symboles, utilisez l'outil nm pour les identifier. Ensuite, ajoutez des bibliothèques statiques supplémentaires si nécessaire pour résoudre les dépendances.

Remarques supplémentaires :

  • L'utilisation de l'utilitaire de création de liens d'Oracle peut être utile pour analyser les dépendances.
  • En fonction de la version d'Oracle et du compilateur, il peut être nécessaire d'établir une liaison avec un runtime ICC supplémentaire bibliothèques statiques.
  • La liaison statique nécessite de résoudre manuellement toutes les dépendances, ce qui peut être complexe.

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!

Déclaration:
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