为什么我在这个简单的代码中得到“ld:warning:在_main中直接访问全局弱符号”?

时间:2016-04-12 08:00:21

标签: c++ xcode warnings ld

在我的Clang编译器中这是非常奇怪的行为。我使用Xcode(OS X),所有都是最新的。为什么我会在这个简单的代码中收到此警告?如果我删除这两行警告隐藏。

  

ld:警告:在_main中直接访问全局弱符号   std :: __ 1 :: char_traits :: eq(char,char)表示弱符号   不能在运行时覆盖。这可能是由不同造成的   使用不同的可见性设置编译翻译单元。

int main( int argc, char* argv[] ) {
    std::string file = "test";
    size_t pos = file.find( "a" );
    return 0;
}

1 个答案:

答案 0 :(得分:3)

有关详细信息,请参阅Controlling Symbol Visibility @ developer.apple.com

看起来你的libs(例如C ++标准库)和你的代码已经用不同的可见性设置进行编译,至少是链接器错误消息所说的。

要修复警告,您应该在编译代码时使用相同的可见性设置,例如-fvisibility=hidden