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

Comment spécifier les chemins dylib relatifs dans cgo sur macOS

WBOY
Libérer: 2024-02-08 22:10:27
avant
737 Les gens l'ont consulté

如何在 macOS 上的 cgo 中指定相对 dylib 路径

Utiliser cgo sur macOS et spécifier des chemins dylib relatifs est un problème courant. cgo est un outil utilisé par le langage Go pour interagir avec le langage C, tandis que dylib est une bibliothèque de liens dynamiques sur macOS. La spécification de chemins relatifs rend votre projet plus flexible et portable. Alors, comment devrions-nous spécifier les chemins dylib relatifs dans cgo sur macOS ? L'éditeur PHP Strawberry vous répondra en détail.

Contenu de la question

J'essaie actuellement de faire fonctionner un dylib existant écrit en c en go. Pour cela j'utilise cgo et tout se compile correctement. Lorsque go build essaie d'exécuter l'exécutable généré dyld , il ne trouve pas dylib situé dans le répertoire source go.

J'utilise ces cflags et ldflags sans succès :

// #cgo cflags: -i${srcdir}
// #cgo ldflags: -l. -lmylibrary
Copier après la connexion

J'ai également appris que je peux utiliser la chaîne magique @executable_path pour spécifier un chemin de recherche de bibliothèque relatif, mais l'ajouter à -l ou essayer d'ajouter -install_name aux indicateurs de l'éditeur de liens ne donne aucun résultat.

Voici le message d'erreur de l'éditeur de liens que j'ai reçu :

/Users/benedikt/sdk/go1.19.7/bin/go build -o /private/var/folders/.../T/GoLand/___1go_build_myapp myapp #gosetup
/private/var/folders/.../T/GoLand/___1go_build_myapp
dyld[58935]: Library not loaded: '/usr/local/lib/libMyLibrary.dylib'
  Referenced from: '/private/var/folders/.../T/GoLand/___1go_build_myapp'
  Reason: tried: '/usr/local/lib/libMyLibrary.dylib' (no such file), '/usr/lib/libMyLibrary.dylib' (no such file)
Copier après la connexion

Sans ajouter d'étapes de build en dehors de go, comment configurer correctement cgo pour utiliser le dylib situé dans le même dossier où le binaire sera plus tard afin qu'il puisse s'exécuter avec go build ?

Solution de contournement

Il s'avère que j'étais très proche de mon objectif, mais le chemin de recherche stocké dans la bibliothèque actuelle était erroné.

Le code de ma question fonctionne bien après avoir modifié la bibliothèque comme suit :

install_name_tool -id @loader_path/libMyLibrary.dylib libMyLibrary.dylib
Copier après la connexion

Bien que je n'aie pas trouvé de moyen propre de laisser Goland contrôler la construction go pour copier mes bibliothèques dans le répertoire de sortie de l'application en cours d'exécution, j'ai provisoirement copié les dépendances dans la sortie en définissant le répertoire de sortie sur un chemin absolu et en ajoutant Pre -commandes d'exécution pour les dossiers.

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:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!