交叉编译glibc版本链接错误

问题描述 投票:0回答:2

我正在为树莓派配置项目,并且遇到了我不理解的链接错误。

上下文:

实际上,我交叉编译了Qt,一切正常。现在,我正在尝试使opencv正常工作,以便在我的Qt应用程序中进行图像处理。我没有交叉编译opencv,而是使用apt install安装了它,并在〜/ raspi / sysroot中同步了我的目标sysroot。为了获得raspi相机控制,我使用了mmal库(位于/ opt / vc / lib中的rpi上)。我将交叉编译的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如何无法引用为我的rapsi安装在我的raspi上的符号?我试图在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 

..................

感谢您抽出宝贵的时间阅读并可能帮助我。

qt opencv gcc cross-compiling
2个回答
0
投票

在我粗鲁的版本上,glibc版本是

您的问题与GLIBC无关。关于libstdcxx

我不明白opengl如何无法引用已安装的符号

目标系统上安装了什么都没有关系。重要的是您要在host上链接的库。

GCC ABI table中,您可以看出GLIBCXX_3.4.25首先在GCC-8.0.0中定义,并且(或更高版本)是用来构建libopenmpt.so.0的GCC版本。

但是,您正在尝试将此库与gcc-7.4.1链接,并与with

附带的libstdc++.so.6链接。由于that libstdc++.so.6未定义所需的符号,因此链接失败。

您需要使用7.4.1编译器从源代码重建libopenmpt,或升级到gcc-8.0.0(或更高版本)的编译器。

P.S。 strings是找出库中定义了哪些版本的错误

方法。请改用readelf -V

0
投票

因此是编译器版本,有两个选择:

© www.soinside.com 2019 - 2024. All rights reserved.