【问题标题】:Link error on Mac OSX 10.6.7Mac OSX 10.6.7 上的链接错误
【发布时间】:2011-09-12 16:17:30
【问题描述】:

我看到了:

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”目录,我可以毫无问题地删除它......我不明白发生了什么,但我现在可以运行我的可执行文件......

【问题讨论】:

  • 很奇怪。我做了一些挖掘,并在某处看到 AttributeValueTest.o 可能已经是一个可执行文件。我在那个 AttributeValueTest.o 上做了一个“文件”,果然,它是一个随时可用的可执行文件。我修改了我的 makefile 以将该 .o 重命名为 AttributeValueTest,我可以愉快地运行它。此外,可执行文件带有一个“.dSYM”目录,我可以毫无问题地删除它......我不明白发生了什么,但我现在可以运行我的可执行文件......

标签: macos linker linker-errors


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2013-02-26
    • 2016-04-21
    • 1970-01-01
    • 2019-11-25
    相关资源
    最近更新 更多