Ошибка ссылки на 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 ответ:
Вы забыли указать опцию
-c
дляg++
компиляции исходного кода в объектный файл. Таким образом, он становится скомпилированным и связанным в исполняемый файл. Затем вы пытаетесь связать исполняемый файл с исполняемым, что не удается. Из справочникаgcc
:- c компилирует или собирает исходные файлы,но не связывает их. То этап связывания просто не делается. То конечный результат находится в форме объектный файл для каждого исходного файла.
По умолчанию файл объекта имя для исходного файла создается R > замена суффикса .с, .я,.s и т. д., с.o. нераспознанные входные файлы, не требующие компиляции или сборки, являются игнорируемый.