Mac OSX 10.6.7上的链接错误

时间:2011-06-10 17:08:46

标签: macos linker linker-errors

我看到了:

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上做了一个“文件”,果然,它是一个随时可用的可执行文件。我修改了我的makefile,将.o重命名为AttributeValueTest,我很乐意运行它。此外,可执行文件附带一个“.dSYM”目录,我可以删除没有任何问题...我不明白发生了什么,但我现在可以运行我的可执行文件...

1 个答案:

答案 0 :(得分:6)

您忘记为-c指定g++选项,以将源代码编译到目标文件中。因此它被编译并链接到可执行文件中。然后,您尝试将可执行文件链接到可执行文件,这会失败。从gcc的手册页:

  

-c编译或汇编源文件,但不要链接。该   链接阶段根本没有完成。该   最终输出是一种形式   每个源文件的目标文件。

     

默认情况下,源文件的目标文件名由   R>替换后缀.c,.i,.s等,   与.o。无法识别的输入文件,而不是   需要编译或组装,是   忽略。