Ошибка ссылки на Mac OSX 10.6.7


Я вижу:

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, и конечно же, это готовый к работе исполняемый файл. Я изменил свой makefile, чтобы переименовать его .o в AttributeValueTest, и я могу с радостью запустить его. Кроме того, исполняемый файл поставляется с ".каталог dSYM, который я могу удалить без каких-либо проблем... Я не понимаю, что происходит, но теперь я могу запустить свой исполняемый файл...

1 3

1 ответ:

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

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

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