J'essaie de lier un fichier de bibliothèque statique (.a) avec un fichier .o qui utilise supposément les symboles de la bibliothèque. Cependant, lors de l'utilisation de gcc - l'erreur de l'éditeur de liens normal apparaît, indépendamment de l'utilisation du fichier .a commeg ++ vs gcc, problème de liaison avec une bibliothèque statique (.a)
gcc -L. Cependant, la même commande fonctionne parfaitement avec g ++.
Pourquoi cela se produit-il?
Je peux voir que le fichier .c est totalement légal c (et donc C++), mais alors pourquoi gcc n'est-il pas capable de détecter des symboles dans la bibliothèque? Essayé de trouver les symboles dans la bibliothèque en utilisant objdump, a pu trouver des symboles ressemblant étroitement, mais pas exactement. par exemple:
obtenu 00000000000000b0 g F .text 000000000000004e _ * Z15PhttsFn_InitTTSPh * pour le symbole * PhttsFn_InitTTS *
Quelqu'un peut-il s'il vous plaît expliquer ce phénomène? J'ai également vérifié l'architecture pour laquelle le fichier de bibliothèque a été compilé, et c'est la même chose que mon architecture.
Merci!
Il semble que votre bibliothèque ait été compilée en C++, par conséquent les noms de symboles sont "mutilés" et les points d'entrée sont uniquement accessibles au code C++. –
"totalement légal c (et donc C++)" C n'est pas un sous-ensemble de C++. – alternative
merci pour la réponse Paul :) Mathepic, désolé - mauvais choix de mots que je vois - maintenant que je pense à ce sujet un code C juridique est illégale en C++, comme l'assignation de pointeur vide à un pointeur d'un autre genre, etc – Anonymous