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

Jav*_*ner 8 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;
}
Run Code Online (Sandbox Code Playgroud)

ser*_*gej 8

有关详细信息,请参阅控制符号可见性 @ developer.apple.com

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

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