为什么我在这个简单的代码中会出现 "ld: warning: direct access in _main to global weak symbol" 警告?

15

我的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
你尝试过使用“-fvisibility=hidden”编译吗? - sergej
4
为什么我要隐藏这个警告?我不想无视它,而是想找出我的代码出了什么问题,并在不隐藏警告的情况下解决它。 - JavaRunner
1个回答

9
请参考开发者文档了解如何控制符号可见性。
您的库(例如C ++标准库)和代码似乎已使用不同的可见性设置进行编译,至少链接器错误消息是这样说的。
为了解决此警告,请在编译代码时使用相同的可见性设置,例如-fvisibility=hidden

很奇怪,但它并没有修复警告。 - JavaRunner
1
-fvisibility=default 可以吗? - sergej
1
默认可见性也不起作用。 - Zendel
@Zendel 请查看 https://dev59.com/YWoy5IYBdhLWcg3wPLr0#11879361 - spartygw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接