C++: erreur de compilation - “pas de .eh_frame_hdr table sera créée”
Je suis censé utiliser une analyse des données du programme pour une expérience de physique. Je n'arrive pas à compiler.
Le code est vieux, pas vraiment compatible avec les GCC-versions de ce que je peux trouver. Pour rendre les choses un peu plus de temps comsuming, j'ai obtenu le code d'un gars qui a modifié tous les fichiers "makefile" pour en faire compiler sur Mac. Je n'ai pas de C++de l'expérience, mais de l'homme-pages, de Google et de la patience, j'ai corrigé beaucoup d'erreurs sur le chemin, mais je suis bloqué sur celui-ci, même après une semaine d'essais et de recherche sur google.
Je crois pertinents message d'erreur est le suivant:
/usr/bin/ld: error in /home/daniel/skola/exjobb/miniballscripts
/lib/libCommandLineInterface.so(.eh_frame); no .eh_frame_hdr table will be created.`
Ce qui peut être la cause, et ce qui peut être le remède?
libCommandLineInterface.so
a été compilé par moi avant, sans aucune erreur apparente messages:
$ make
g++ -g2 -O2 -I./ -c CommandLineInterface.cc -o CommandLineInterface.o
g++ -g -Wl -o /home/daniel/skola/exjobb/miniballscripts/lib/libCommandLineInterface.so
CommandLineInterface.o -lm -L/home/daniel/skola/exjobb/miniballscripts/lib -lgcc -lc
Done
Mon g++-version est g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3
, amd64.
- http://tinypaste.com/9eee9 - faire de sortie
- http://tinypaste.com/ddbde - GNUmakefile
Comme je l'ai dit, je n'ai aucune expérience avec C++, peut-être que ma naïve Makefile modifications ont détruit quelque chose. Mon manque d'expérience me fait aussi de ne pas vraiment savoir ce que les autres informations sont nécessaires afin de m'aider, mais je serai heureux de répondre.
OriginalL'auteur Daniel Andersson | 2010-09-12
Vous devez vous connecter pour publier un commentaire.
Semble que vous avez oublié le
-shared
option de ligne de commande lorsque vous générez lelibCommandLineInterface.so
fichier. Qui pourrait expliquer ces multiples erreurs de définition. Si l'éditeur de liens pense que le fichier qu'il génère est un fichier exécutable (au lieu d'une bibliothèque dynamique), il y aurait alors un lien dans le code de démarrage, etc. Lorsque vous essayez d'utiliser cette .donc, fichier, ces symboles de venir dans le code de démarrage en découdront avec ceux qui sont ajoutés à l'exécutable qui utilise la bibliothèque dynamique.Il est possible que le libTransfer.si des erreurs sont liées à la même drapeau a été omis. Une bibliothèque partagée est autorisé à avoir en balançant les références (qui doivent être résolues lors de la bibliothèque est utilisée), mais un exécutable doit avoir tous les symboles résolu au moment de la liaison. C'est probablement une simplification de la façon dont les choses sont, mais je n'ai jamais besoin d'entrer dans plus de détails sur la liaison dynamique dans linux. 🙂 De toute façon, l'ajout de
-shared
option peut résoudre le undefined reference ainsi des erreurs.libCommandLineInterface.so
. Maintenant, je suis à une étape plus près de mon but 🙂J'ai oublié de mentionner: il n'a pas de résoudre l'indéfini des références, mais la eh_frame_hdr-erreur de s'en aller.
OriginalL'auteur vhallac
Les erreurs de liaison de souci de démarrage:
Les symboles sont multiplier définies sont "standard" sur Unix et je n'ai jamais eu besoin de s'embêter avec moi-même sur Mac, bien que je ne fais pas de programmation GUI.
Vous avez besoin de regarder
libCommandLineInterface.cc
avec un très lésés attitude et de décider si elle fournit tout ce dont vous avez besoin. Vous pourriez être en mesure de le retirer complètement. Si elle contient certaines des choses que vous avez besoin, vous aurez besoin pour cautériser le matériel qui définit_start
, et_end
etmain
et ainsi de suite.Vous allez également avoir à se soucier de l'absence de vtables:
eh_frame_hdr
problème a été résolu, maintenant, c'est sur le manque vtable des messages.OriginalL'auteur Jonathan Leffler
C'est résolu. Le eh_frame_hdr-problème a été résolu par ce fil. L'indéfini des références a été résolu par la suppression de
libTransfer.so
après la premièremake
, puis directement après l'exécution demake
de nouveau. Ne me demandez pas comment, mais que fait la compilation.C'était il y a quelques années, mais dans un commentaire à la accepté de répondre, j'ai écrit que
-shared
(et apparemment-fPIC
) fait leeh_frame_hdr
messages d'aller loin.OriginalL'auteur Daniel Andersson