Ошибка связи на Mac OSX 10.6.7 - PullRequest
3 голосов
/ 10 июня 2011

Я вижу:

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

При создании очень простой программы, которая имеет только 1 .h и 1 .cpp файл.

Строки компиляции:

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 

Я пытался указать -arch x86_64, -arch i386 и -m32, но ничего не получалось (я получил другие ошибки, жаловался, что libcppunit был не в правильном формате).

Любая идея/ указатель / предложение?

Спасибо!


Очень странно.Я немного покопался и где-то увидел, что AttributeValueTest.o уже может быть исполняемым файлом.Я сделал «файл» для этого AttributeValueTest.o, и, конечно же, это готовый исполняемый файл.Я изменил свой make-файл, чтобы переименовать этот .o в AttributeValueTest, и я могу с радостью его запустить.Кроме того, исполняемый файл поставляется с каталогом ".dSYM", который я могу удалить без каких-либо проблем ... Я не понимаю, что происходит, но теперь я могу запустить свой исполняемый файл ...

1 Ответ

6 голосов
/ 10 июня 2011

Вы забыли указать параметр -c для g++, чтобы скомпилировать исходный код в объектный файл. Так что это скомпилировано и связано в исполняемый файл. Затем вы пытаетесь связать исполняемый файл в исполняемый файл, который не удается. Со страницы руководства gcc:

-c Компилировать или собирать исходные файлы, но не создавать ссылки. этап связывания просто не сделан. Конечный результат в форме объектный файл для каждого исходного файла.

По умолчанию имя файла объекта для исходного файла создается r> заменить суффикс .c, .i, .s и т. д., с .o. Нераспознанные входные файлы, а не требуют компиляции или сборки, являются игнорироваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...