9
votes

C ++: Erreur de compilation - "Non .eH_Frame_HDR Table sera créée"

Je suis censé utiliser un programme d'analyse de données pour une expérience physique. Je ne peux pas l'obtenir pour compiler cependant.

Le code est vieux, pas vraiment compatible avec les versions actuelles du GCC à partir de ce que je peux trouver. Pour rendre les choses un peu plus difficiles, j'ai eu le code d'un gars qui avait modifié tous les maquillages pour le rendre compilé sur Mac. Je n'ai pas de C ++ - expérience, mais avec des pages homme, Google et Patience, j'ai réparé beaucoup d'erreurs sur le chemin, mais je suis coincé sur celui-ci, même après une semaine d'essais et de googling. < p> Je pense que le message d'erreur correspondant est le suivant: xxx

Quelle peut être la cause, et que peut être le remède?

libcommandlineinterface.so a été compilé par moi avant, sans aucun message d'erreur apparent: xxx

My g ++ - la version est g ++ (Ubuntu 4.4.3-4ubuntu5 ) 4.4.3 , AMD64.

  • http://tinypaste.com/9eee9 - Fabriquez la sortie
  • http://tinypaste.com/dddbde - gnumakefile

    Comme je l'ai dit, je n'ai aucune expérience avec C ++, alors peut-être que mes modifications de maquillage naïve ont détruit quelque chose. Mon manque d'expérience me fait aussi ne pas vraiment savoir quelles autres informations sont nécessaires pour m'aider, mais je serai heureux de répondre.


0 commentaires

3 Réponses :


1
votes

Les erreurs de liaison de la préoccupation commencent par: xxx

Les symboles multiples sont définis sont "standard" sur UNIX - et je n'ai jamais eu besoin de vous embêter avec eux sur Mac non plus, Bien que je ne fais pas de programmation graphique là-bas.

Vous devez regarder libcommandlineinterface.cc avec une attitude très préjudiciable et décider s'il fournit tout ce dont vous avez besoin. Vous pourriez être capable de l'enlever complètement. Si cela contient des trucs que vous avez besoin, vous devez cautériser le matériau qui définit _start et _end et principal et ainsi de suite. < / p>

Vous allez également avoir à vous inquiéter des vtables manquants: xxx


1 commentaires

Merci beaucoup pour votre réponse. Le problème eh_frame_hdr a été résolu, il se trouve maintenant sur les messages à fourtilles manquants.



3
votes

On dirait que vous avez oublié l'option -shared ligne de commande lorsque vous générez le fichier libccommandlineinterface.so . Cela expliquerait ces erreurs de définition multiples. Si la liaison pense que le fichier qu'il génère est un exécutable (au lieu d'une bibliothèque dynamique), il serait alors associé au code de démarrage, etc. Lorsque vous essayez d'utiliser ce fichier .so, ces symboles entrant dans le code de démarrage s'affrontera avec ceux qui sont ajoutés à l'exécutable qui utilise la bibliothèque dynamique.

Il est possible que les erreurs libtransfer.so soient liées au même drapeau étant omis. Une bibliothèque partagée est autorisée à avoir des références en suspens (qui sont résolues lorsque la bibliothèque est utilisée), mais une exécutable doit contenir tous les symboles résolus au moment de la liaison. C'est probablement une simplification excessive de la manière dont les choses sont, mais je n'ai jamais eu besoin d'entrer plus de détails sur la liaison dynamique de Linux. :) De toute façon, l'ajout de -Shared peut également résoudre les erreurs de référence non définies.


2 commentaires

Merci beaucoup, j'avais besoin d'ajouter -fic et à la commande compiler pour libcommandlineinterface.so . Maintenant, je suis un pas plus près de mon objectif :-)


Vous avez oublié de mentionner: il n'a pas réparer les références non définies, mais elle a rendu l'erreur EH_FRAME_HDR.



1
votes

C'est résolu. Le problème EH_FRAME_HDR a été résolu par ce fil. Les références non définies ont été résolues en supprimant libtransfer.so après le premier faire , puis directement exécuté faire . Ne me demandez pas comment, mais cela a fait compiler.


2 commentaires

"Le problème EH_FRAME_HDR a été résolu par ce fil ..." - Comment ou où? Je ne vois pas ça, ça a déclaré n'importe où.


@JWW: C'était il y a quelques années, mais dans un commentaire à la réponse acceptée, j'ai écrit que -shared (et apparemment -fic ) a fait le eh_frame_hdr Les messages disparaissent.