gpt4 book ai didi

c++11 - 未解析的 std::__cxx11::basic_string::~basic_string 和 std::allocator::~allocator() 符号

转载 作者:行者123 更新时间:2023-12-05 03:58:59 27 4
gpt4 key购买 nike

我正在尝试编译 QtWebApp使用 Qt5.5.1 到最新的 RPI4-Raspbian Buster,我遇到了莫名其妙的 GLIBCXX 未解析符号

什么有效:QtWebApp 使用在 Raspbian Buster 上 native 编译的 qt5.5.1 二进制文件从 Windows 交叉编译到 armhf,可以很好地处理以下组件

  1. 工具链:raspberry-gcc8.3.0.exe安装在 Windows 10 上。

  2. Qt 二进制库:在 RPI4 Raspbian Buster OS 和复制到 Windows 10。

  3. 命令行:
    c:/SysGCC/raspberry/bin/arm-linux-gnueabihf-g++.exe -std=c++11 -fPIC -I.
    {ALL QT INCLUDE DIRS}
    -IC:/SysGCC/raspberry/arm-linux-gnueabihf/sysroot/opt/vc/include
    -g -rdynamic -funwind-tables -Woverflow
    {ALL QTWEB SOURCE FILES}
    -LC:/SysGCC/pi4/pi4qt551/lib
    -lQt5Core -lQt5Gui -lQt5Widgets
    -lQt5Multimedia -lQt5MultimediaWidgets
    -lQt5Network -lm -lpthread -o qtweb

这会生成一个可在 RPI-4 上正常工作的 arm 可执行文件。

什么失败了

在 RPI4 上原生编译 (这是我想要的开发环境) 时,编译奇怪地失败并出现以下错误:

/usr/bin/ld: /tmp/ccnnsRCD.o: undefined reference to symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21'

我尝试过的(没用)

1) 遵循 Converting std::__cxx11::string to std::string 的建议并通过 -D_GLIBCXX_USE_CXX11_ABI=0它失败并出现以下错误:

/usr/bin/ld: /tmp/ccZfI5co.o: undefined reference to symbol '_ZNSaIcED1Ev@@GLIBCXX_3.4'

那些符号分解为 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string() 的地方和 std::allocator<char>::~allocator()分别。

2) 我还运行了所有组合 WITH/WITHOUT -std=c++11 and D_GLIBCXX_USE_CXX11_ABI=0这些是错误

WITH  -std=c++11, WITHOUT -D_GLIBCXX_USE_CXX11_ABI=0 
/usr/bin/ld: /tmp/ccnnsRCD.o: undefined reference to symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21'

WITH -std=c++11, WITH -D_GLIBCXX_USE_CXX11_ABI=0
/usr/bin/ld: /tmp/ccZfI5co.o: undefined reference to symbol '_ZNSaIcED1Ev@@GLIBCXX_3.4'

WITHOUT -std=c++11, WITH -D_GLIBCXX_USE_CXX11_ABI=0
/usr/bin/ld: /tmp/cctFncwz.o: undefined reference to symbol '_ZNSaIcED1Ev@@GLIBCXX_3.4'

WITHOUT -std=c++11, WITHOUT -D_GLIBCXX_USE_CXX11_ABI=0
/usr/bin/ld: /tmp/cchkJYdO.o: undefined reference to symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21'

3) 我还从 raspberry-gcc8.3.0.exe 复制了 sysroot在 Win10 上安装到 RPi-4 并将其传递给 gcc作为其 --sysroot位置 - 这也因 ~basic_string() 而失败解析器错误。 (我不知道如何验证 --sysroot 是否有任何影响,尽管我检查了 gcc -v 输出中没有 --with_libs,正如 GCC ignores --sysroot 帖子中所建议的那样)

信息:除了使用 gcc 之外,命令行在 RPI4-Buster 上完全相同。并且没有通过 -IC:/SysGCC/raspberry/arm-linux-gnueabihf/sysroot/opt/vc/include

问题:这是怎么回事(假设没有明显的编译选项不匹配;)使用 gcc 8.3 工具链从 Windows 到 arm-linux 进行交叉编译,但是当使用 gcc 8.3 在 raspbian buster 上本地编译时相同的代码库失败,看起来像 GLIBCXX 版本不匹配Raspbian Buster OS 二进制文件?

我已经坚持了 2 天了。请建议我可以在这里尝试的任何其他步骤。

最佳答案

  • 您是否将编译器作为 gcc 而不是 g++ 执行?那会导致这个问题。调用g++
  • 否则,请尝试将 -lstdc++ 添加到您的链接标志中。

解释:

显然,这些符号来自 C++ 标准库。在某些情况下 - 至少,当您使用 gcc 二进制而不是 g++ 调用 GCC 时 - GCC 编译 C++ 代码,但不会自动链接到 GNU C++标准库。如果出于某种原因这不能通过调用 g++ 解决,您可以尝试添加 -lstdc++ 标志,这意味着“链接到库 libstdc++.solibstdc++.a,您应该在库搜索路径中找到它。”

关于c++11 - 未解析的 std::__cxx11::basic_string::~basic_string 和 std::allocator<char>::~allocator() 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57524025/

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