交叉编译GLIBCXX版本链接错误 [英] Cross compilation GLIBCXX version link error
问题描述
我正在为覆盆子配置项目,但我面临一个我无法理解的链接错误。
上下文:
实际上,我交叉编译了Qt,一切都很正常。 现在,我正在尝试让OpenCV也能在我的Qt应用程序中进行图像处理。 我没有交叉编译OpenCV,而是与apt一起安装了它,并在~/raspi/sysroot中同步了我的目标sysroot。 为了获得raspi摄像头控制,我使用了MMAL库(位于rpi上的/opt/vc/lib中)。 我交叉编译了Qt和gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf,所以Qmake也在使用它。 Raspi正在运行Raspian Buster Lite,它使用相当旧的glibc(使用Qt mkspec文档中推荐的GCC-linaro-7.4.1的原因)
问题:
当我尝试编译简单的main.cpp时,链接器在链接OpenCV库时失败:
~/raspi/sysroot/usr/lib/arm-linux-gnueabihf/libopenmpt.so.0: undefined reference to `std::random_device::_M_getentropy() const@GLIBCXX_3.4.25'
在我粗糙的glibc版本上
$ strings /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_DEBUG_MESSAGE_LENGTH
问题:
我不明白为什么OpenGL不能引用它安装在我的RASPI上的符号作为我的RAPSI? 我尝试在raspi上编译这段代码,所有链接都正确无误。 我错过了什么?附件: 命令失败
~/Documents/personal/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ -mfloat-abi=hard --sysroot=~/raspi/sysroot -Wl,-O1 -Wl,-rpath,/usr/local/qt5pi/lib -Wl,-rpath-link,~/raspi/qt5pi/lib -Wl,-rpath-link,~/raspi/sysroot/usr/lib/arm-linux-gnueabihf -Wl,-rpath-link,~/raspi/sysroot/lib/arm-linux-gnueabihf -o photomata main.o -L~/raspi/sysroot/opt/vc/lib/ -lopencv_core -lopencv_videoio -lopencv_highgui -lraspicam -lmmal -lmmal_core -lmmal_util -lmmal_vc_client -lmmal_components -lvchiq_arm -lvcsm -lcontainers -lvcos -lbcm_host ~/raspi/qt5pi/lib/libQt5MultimediaWidgets.so ~/raspi/qt5pi/lib/libQt5Widgets.so ~/raspi/qt5pi/lib/libQt5Multimedia.so ~/raspi/qt5pi/lib/libQt5Gui.so ~/raspi/qt5pi/lib/libQt5Network.so ~/raspi/qt5pi/lib/libQt5Core.so -L~/raspi/sysroot/usr/lib/arm-linux-gnueabihf -lGLESv2 -lpthread
..................
感谢您抽出时间阅读,或许能对我有所帮助。
问题在Missing crt1.o/crti.o for cross compilation
继续推荐答案
在我粗糙的glibc版本上
您的问题与GLIBC无关。是关于libstdcxx
的。
我不明白OpenGL为什么不能引用它已安装的符号
目标系统上安装了什么并不重要。重要的是您要链接到主机上的哪些库。
从GCC ABI table可以看出,GLIBCXX_3.4.25
最早是在GCC-8.0.0中定义的,该版本(或更高版本)是用于构建libopenmpt.so.0
的GCC版本。
但是,您正在尝试将此库与 您需要使用7.4.1版编译器从源重新生成 P.S. 这篇关于交叉编译GLIBCXX版本链接错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!gcc-7.4.1
链接,并与与一起提供的libstdc++.so.6
链接。由于libstdc++.so.6
没有定义所需符号,因此您的链接失败。
libopenmpt
,或者升级到GCC-8.0.0(或更高版本)。strings
是找出库中定义了哪些版本的错误方法。请改用readelf -V
。