在我的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;
}
答案 0 :(得分:3)
有关详细信息,请参阅Controlling Symbol Visibility @ developer.apple.com。
看起来你的libs(例如C ++标准库)和你的代码已经用不同的可见性设置进行编译,至少是链接器错误消息所说的。
要修复警告,您应该在编译代码时使用相同的可见性设置,例如-fvisibility=hidden
。