4 votes

Erreur de lien sur Mac OSX 10.6.7

Je vois :

ld: in objs/AttributeValueTest.o, can't link with a main executable for architecture x86_64

Lors de la construction d'un programme très simple qui ne comporte qu'un fichier .h et un fichier .cpp.

Les lignes de compilation sont :

g++ -g -I./ -I/usr/local/include -o objs/AttributeValueTest.o tp_datastruct/tests/AttributeValueTest.cpp -L/usr/local/lib -lavrocpp -lcppunit -lm 
g++ -g -I./ -I/usr/local/include -o AttributeValueTest objs/AttributeValueTest.o -L/usr/local/lib -lavrocpp -lcppunit -lm 

J'ai essayé de spécifier -arch x86_64, -arch i386 et -m32, mais rien n'a fonctionné (j'ai eu d'autres erreurs, il se plaignait que libcppunit n'était pas dans le bon format).

Une idée/pointeur/suggestion ?

Merci !


Très étrange. J'ai fait quelques recherches, et j'ai vu quelque part que AttributeValueTest.o pourrait être un exécutable déjà existant. J'ai fait un "file" sur ce AttributeValueTest.o, et bien sûr, c'est un exécutable prêt à l'emploi. J'ai modifié mon makefile pour renommer ce .o en AttributeValueTest, et je peux l'exécuter sans problème. De plus, l'exécutable est livré avec un répertoire ".dSYM", que je peux supprimer sans problème... Je ne comprends pas ce qui se passe, mais je peux lancer mon exécutable maintenant...

6voto

Vous avez oublié de préciser -c à l'option g++ pour compiler un code source en fichier objet. Il est donc compilé et lié à un fichier exécutable. Ensuite, vous essayez de lier l'exécutable à l'exécutable, ce qui échoue. Depuis le gcc La page du manuel de l'entreprise :

-c Compile ou assemble les fichiers sources, mais ne les lie pas. L'étape de liaison de étape de liaison n'est tout simplement pas faite. Le site résultat final est sous la forme d'un fichier objet pour chaque fichier source.

Par défaut, le nom du fichier objet d'un fichier source est fait en r> remplaçant le suffixe .c, .i, .s, etc, par .o. Les fichiers d'entrée non reconnus, ne nécessitant pas ne nécessitant pas de compilation ou d'assemblage, sont ignorés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X