-x链接标志导致Mac OSX 10.9上的链接错误(错误?)

时间:2014-07-23 21:20:46

标签: c++ macos clang ld

根据ld手册页,-x link标志禁止将非全局符号放入输出文件的符号表中。这些符号对于调试很有用,但在运行时不使用。但是这个标志在Mavericks上造成链接错误。例如,以下源文件:

struct Yo
{
    Yo() {}
};

void useYo()
{
    Yo yo;
}

编译/链接如下:

c++ -arch x86_64 -bundle -Wl,-x -o tc.so tc.cpp

产生以下输出:

ld: internal error: atom not found in symbolIndex(__ZN2YoC1Ev) for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

构造函数Yo :: Yo()就是问题所在:

c++filt __ZN2YoC1Ev
Yo::Yo()

删除-x链接标志可以解决问题。在构造声明之外移动构造函数实现也可以解决问题。这段代码编译/链接很好:

struct Yo
{
    Yo();
};

Yo::Yo() {}

void useYo()
{
    Yo yo;
}

这是我的编译器信息:

Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.3.0
Thread model: posix

这是clang或链接器中的错误,还是有一些原因我不应该使用-x链接标志?

0 个答案:

没有答案