C++11 未解析的std::uucxx11::基本字符串::~basic\u字符串和std::分配器<;char>;::~分配器()符号
我试图用Qt5.5.1编译到最新的RPI4 Raspbian Buster上,我遇到了无法解释的GLIBCXX未解析符号 什么有效:使用Raspbian Buster上本机编译的qt5.5.1二进制文件,从windows交叉编译到armhf的QtWebApp适用于以下组件C++11 未解析的std::uucxx11::基本字符串::~basic\u字符串和std::分配器<;char>;::~分配器()符号,c++11,gcc,raspberry-pi,cross-compiling,C++11,Gcc,Raspberry Pi,Cross Compiling,我试图用Qt5.5.1编译到最新的RPI4 Raspbian Buster上,我遇到了无法解释的GLIBCXX未解析符号 什么有效:使用Raspbian Buster上本机编译的qt5.5.1二进制文件,从windows交叉编译到armhf的QtWebApp适用于以下组件 工具链:安装在Windows 10上 Qt二进制库:在RPI4 Raspbian Buster操作系统和 已复制到Windows 10 命令行: c:/SysGCC/raspberry/bin/arm-linux-gnuea
c:/SysGCC/raspberry/bin/arm-linux-gnueabihf-g++.exe-std=c++11-fPIC-I。
{所有QT包括目录}
-IC:/SysGCC/raspberry/arm-linux-gnueabihf/sysroot/opt/vc/include
-g-rdynamic-funwind表格-Woverflow
{所有QTWEB源文件}
-LC:/SysGCC/pi4/pi4qt551/lib
-lQt5Core-lQt5Gui-lQt5Widgets
-LQT5多媒体-LQT5多媒体窗口小部件
-lQt5Network-lm-lpthread-o qtweb
/usr/bin/ld:/tmp/ccnnsRCD.o:对符号“\u ZNSt7\u cxx1112basic\u stringIcSt11char\u traitssiceed1ev@@GLIBCXX\u 3.4.21”的未定义引用
我试过的(没用)
1)以下建议来自并通过-D\u GLIBCXX\u USE\u cx11\u ABI=0
失败,出现以下错误:
/usr/bin/ld:/tmp/ccZfI5co.o:对符号“\u ZNSaIcED1Ev@@GLIBCXX\u 3.4”的未定义引用
其中,这些符号分别指向std::u cxx11::basic\u string::~basic\u string()
和std::allocator::~allocator()
2)我还运行了所有的组合,有/没有-std=c++11和D_GLIBCXX_USE_cx11_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)我还将Win10上安装的sysroot复制到RPi-4,并将其作为其--sysroot
位置传递给~basic_string()
取消解决错误。(我不知道如何验证--sysroot
是否有任何效果,尽管我检查了gcc-v
输出没有——正如帖子中建议的那样,其中包含了_libs
)
信息:除了使用gcc
且未传递-IC:/SysGCC/raspberry/arm-linux-gnueabihf/sysroot/opt/vc/include,RPI4 Buster上的命令行完全相同
问题:
为什么(假设没有明显的编译选项不匹配;)使用gcc 8.3工具链从windows交叉编译到arm linux可以工作,但在raspbian buster上使用gcc 8.3本机编译时,相同的代码库会失败,raspbian buster OS二进制文件中的GLIBCXX版本不匹配
这件事我已经坚持了两天了。请建议我可以在这里尝试的任何其他步骤。
- 您是否以
gcc
而不是g++
的方式执行编译器?这会导致这个问题。调用g++
- 否则,请尝试将
-lstdc++
添加到链接标志中
说明:
显然,符号来自C++标准库。在某些情况下,至少当使用GCAR/GCUT/BASIC二进制调用GCC而不是<代码> G++< /COMP> > GCC编译C++代码,但不会自动链接到GNU C++标准库。如果由于某种原因,调用g++
无法解决此问题,您可以尝试添加-lstdc++
标志,这意味着“链接库libstdc++。因此
或libstdc++.a
,您应该在库搜索路径中找到它”。您尝试过从其他类似Unix的系统进行交叉编译吗?您是否尝试过使用gcc 8.3.0在Linux系统上进行本地编译?@einpoklum没有尝试过其他类似于env的unix。Buster是我尝试在本地编译的唯一linux系统。不管怎样,一个完全本机编译怎么会有GLIBCXX冲突,我都很困惑。。。我要么对一些琐碎的事情视而不见,要么就是在新的buster发行版中发现了一个bug。。。想一想,我想我也应该把这个贴在rpi.org上……也许是因为图书馆版本不匹配。您可以安装多个libstdc++吗?另外-您是否尝试添加-lstdc++
?@einpoklum好的,我将尝试添加-lstdc++
,并发布结果。(当想知道它是否不是由-STD= C++ 11……暗示)另一件事是举例说明C++库文件中的符号,看看你是否有类似的符号;如果您这样做了,请尝试找出区别。通常,调用gcc
而不是g++
的人会遇到这种情况。事实上,g++在不使用-lstdc++…的情况下解决了这一问题但我确实检查了g++是否像我多次看到的那样链接到了gcc。虽然没有,但arm-linux-gnueabihf-gcc-8 arm-linux-gnueabihf-g++-8在/usr/bin中具有相同的大小和时间戳但是现在运行一个diff报告它们不是完全相同的二进制文件。。。。嗯;)@马格利斯:据此编辑。