C++ 为什么我会得到;ld:警告:直接进入“全球弱符号主菜单”;在这个简单的代码中?

C++ 为什么我会得到;ld:警告:直接进入“全球弱符号主菜单”;在这个简单的代码中?,c++,xcode,warnings,ld,C++,Xcode,Warnings,Ld,在我的铿锵编译器中,这是一种非常奇怪的行为。我使用Xcode(OSX),一切都是最新的。为什么我会在这么简单的代码中得到这个警告?如果我删除这两行,警告将隐藏 ld:警告:直接访问全局弱符号 std::_1::char\u traits::eq(char,char)表示弱符号 无法在运行时重写。这可能是由不同的原因造成的 正在使用不同的可见性设置编译转换单元 有关详细信息,请参阅 看起来你的LIBS(例如C++标准库)和你的代码已经被编译成强>不同的可见性设置,至少,链接器错误消息就是这样说的。

在我的铿锵编译器中,这是一种非常奇怪的行为。我使用Xcode(OSX),一切都是最新的。为什么我会在这么简单的代码中得到这个警告?如果我删除这两行,警告将隐藏

ld:警告:直接访问全局弱符号 std::_1::char\u traits::eq(char,char)表示弱符号 无法在运行时重写。这可能是由不同的原因造成的 正在使用不同的可见性设置编译转换单元

有关详细信息,请参阅

看起来你的LIBS(例如C++标准库)和你的代码已经被编译成<>强>不同的可见性设置,至少,链接器错误消息就是这样说的。


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

您是否尝试使用
-fvisibility=hidden
进行编译?@sergej为什么要隐藏此警告?我不想忽视它。我想找出我的代码出了什么问题,并在不隐藏它的情况下解决它。这很奇怪,但它无法修复警告
-fvisibility=default
也许?
int main( int argc, char* argv[] ) {
    std::string file = "test";
    size_t pos = file.find( "a" );
    return 0;
}