2017-07-12 2 views
0

J'essaie de lier un fichier, "lib guile_2.0_la-foreign.o" afin de compiler guile-2.0.11 sur macOS Sierra. La commande ld du fichier retourne faire plus d'une douzaine d'erreurs similaires àOù sont définis les symboles ffi?

"_ffi_type_float", referenced from: 
_fill_ffi_type in lib guile_2.0_la-foreign.o 

ld: symbol(s) not found for architecture x86_64 

où le « _ffi_type_xxx » varie en position « xxx ». J'ai installé libffi avec hombrew, et j'ai dit à CPPFLAGS et LDFLAGS où trouver les répertoires lib et include, mais j'ai toujours la même erreur. Où sont ces symboles à trouver?

+0

Avez-vous réellement lié la bibliothèque lors de la construction de votre application? Avec '-lffi'? –

+0

Avez-vous suivi les instructions pour relier correctement Guile? https://www.gnu.org/software/guile/manual/guile.html#Linking-Guile-into-Programs peut-être (bien que je ne sois pas sûr de quel "guile" vous faites référence) –

+0

Le lien est fait via un Makefile généré via un fichier de configuration. Le fichier configure, à son tour, est généré à l'aide d'outils automatiques, et l'ensemble du processus démarre à partir du téléchargement du paquetage guile-2.0.11 à partir du référentiel GitHub et de l'exécution du fichier de script autogen.sh trouvé dans ce paquet. Plus de détails sur les options de la commande configure et la sortie de make peuvent être trouvés ici: [link] (https://stackoverflow.com/questions/45013549/build-of-guile-2-0-11-on-macos- sierra-fails-undefined-symbols-for-architecture) – John

Répondre

0

Dans Makefile, il existe une variable d'environnement (LIBFFI_LIBS) qui spécifie le chemin d'accès à la bibliothèque ffi. Il me manquait le drapeau indiquant que l'éditeur de liens lierait réellement la bibliothèque.

J'ai changé sa valeur de LIBFFI_LIBS="-L/usr/local/opt/libffi/lib" à LIBFFI_LIBS="-L/usr/local/opt/libffi/lib -lffi" et toutes les erreurs concernant les symboles ffi non définis ont maintenant disparu.