gpt4 book ai didi

c++ - GCC 没有链接到 libstdc++?

转载 作者:行者123 更新时间:2023-11-28 04:46:07 25 4
gpt4 key购买 nike

我在 Ubuntu 16.04 (g++ 5.4) 上收到我不理解的 C++ 构建错误:

链接器错误是(取其中的一些并通过 c++filt 运行它们)

undefined reference to symbol 'std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const@@GLIBCXX_3.4'
undefined reference to symbol 'std::condition_variable::notify_one()@@GLIBCXX_3.4.11'

我使用的命令是:gcc -std=c++11 -m64 -fPIC -std=c++11 ...(...有所有的库, 等等)

我假设我正在尝试链接 /usr/lib/x86_64-linux-gnu/libstdc++.so.6。当我针对它运行 strings 时,我看到了 GLIBCXX_3.4GLIBCXX_3.4.11(但我真的不知道这是什么意思。 )

nm 向我显示符号(至少定义了 condition_variable 一个)

$ nm -DA /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | c++filt | grep condition_variable::notify_one
/usr/lib/x86_64-linux-gnu/libstdc++.so.6:00000000000b3930 T std::condition_variable::notify_one()

我已经在我尝试链接的所有库上运行了 readelf,它们似乎都是为相同的 ABI 构建的(GCC:(Ubuntu 5.4.0-6ubuntu1 ~16.04.9) 5.4.0 20160609)

更新

我注意到第一个错误通过显式链接 libstd++.so 得到解决(我将 stdc++ 添加到我的 target_link_libraries 在 CMake 中)。我的印象是我永远不必这样做?

最佳答案

tl;dr: 调用 g++ 而不是 gcc 来避免这个问题

(基于@SergeyA 的评论)

GCC 的行为有所不同,具体取决于您是将其作为 gcc 还是 g++ 二进制文件运行。具体来说,它显然不会自动链接到其捆绑的 C++ 标准库 libstdc++。我猜它会链接到它的 C 标准库——这对你帮助不大。

因此,只需使用适合您的语言的二进制文件即可;指定 --std=c++whatever 是不够的。

关于c++ - GCC 没有链接到 libstdc++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49242829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com