我正在尝试在一个Nitrogen6x板上建立Qt 5,它由*i.MX6Q`驱动。
我已经在板上安装了Debian/wheezy,并且正在使用Ubuntu12.10机器进行交叉编译。
配置Qt就像一种魅力,但我被困在了make步骤中。这是我运行的配置脚本:
./configure -v -opensource -confirm-license -reduce-relocations -no-pch -no-xcb -no-opengl -opengl es2 -qt-libpng -qt-zlib -qt-xkbcommon -qt-xcb -qt-pcre -qt-libjpeg -qt-sql-mysql -optimized-qmake\
-make libs -device imx6 \
-compile-examples \
-device-option CROSS_COMPILE=/home/finn/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/arm-linux-gnueabi- \
-sysroot /media/finn/d72e3b65-b529-4e5c-9d30-872e1b0c9973 \
-prefix /opt/qt5这是我在制作过程中大约5分钟收到的错误:
/home/finn/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/../../../../arm-linux-gnueabihf/bin/ld:
/media/finn/d72e3b65-b529-4e5c-9d30-872e1b0c9973/usr/lib/libm.a(mpa.o): relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/media/finn/d72e3b65-b529-4e5c-9d30-872e1b0c9973/usr/lib/libm.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status以前,当它试图访问libz.a但将qt参数添加到固定的配置命令中时,我也遇到了同样的错误。
许多文章指出,应该重新编译受影响的应用程序/库,但是我认为这是不可能的,因为libm是libc6的一部分。
我已经尝试过用aptitude remove libc6-dev zlib1g-dev g++-4.6和apt-get install gcc g++ make flex bison openssl libssl-dev perl perl-base perl-modules libperl-dev build-essential重新安装它。
不幸的是,这并没有解决问题。
Debian已经使用官方的网络安装程序以及一个内核和边界设备提供的覆盖来安装,边界设备是板的制造商。
有谁知道怎么解决这个问题吗?
我的下一步将是安装一个全新的Debian系统,但我真的想避免这种情况。
编辑
用-static选项编译qtbase对我有效,但是在make步骤中试图构建me声明性时,我遇到了这个错误:
/home/finn/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/../../../../arm-linux-gnueabihf/bin/ld: cannot find crt1.o: No such file or directory
/home/finn/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/../../../../arm-linux-gnueabihf/bin/ld: cannot find crti.o: No such file or directory
/home/finn/qt/qtbase/lib/libQt5Core.a(qlibrary_unix.o): In function `QLibraryPrivate::load_sys()':
qlibrary_unix.cpp:(.text+0xaac): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/home/finn/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lqxcb
/home/finn/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/../../../../arm-linux-gnueabihf/bin/ld: cannot find /lib/arm-linux-gnueabihf/libpthread.so.0
/home/finn/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/../../../../arm-linux-gnueabihf/bin/ld: cannot find /usr/lib/arm-linux-gnueabihf/libpthread_nonshared.a
collect2: error: ld returned 1 exit status编辑2-解决方案
我修复了这个问题并成功地编译了Qt。我所需要做的就是重新安装Ubuntu。它确实不是一个优雅的解决方案,但它对我有效。
发布于 2013-11-11 03:28:55
libm.a(mpa.o):在创建共享对象时,不能将R_ARM_THM_MOVW_ABS_NC重新定位为“本地符号”
翻译:您正在尝试将非-fPIC编译的对象文件(从libm.a到mpa.o)链接到共享库中。你不能这么做。
您需要为目标查找/安装libm.so,或者将qt5配置为不构建共享库(可能使用--disable-shared选项)。
发布于 2014-09-25 09:52:42
有点晚了,但我找到了问题/解决办法:
问题在于系统。通常gcc会链接到共享的图书馆。但是当它找不到它时,gcc使用静态库(.a)。当您查看[sysroot]/usr/lib/arm-linux-gnueabihf时,共享库不在这里。只有指向/lib/arm-linux-gnueabihf的符号链接。所以gcc在你的主机-pc上寻找共享库,在那里它找不到它们。
解决方案
创建正确的符号链接。(以下是libglib的一个示例,X是版本号)
ln -s [sysroot]/lib/arm-linux-gnueabihf/libglib.so.X \
[sysroot]/usr/lib/arm-linux-gnueabihf/libglib.so(不要忘记删除旧的符号链接并在编译成功后创建它;我只是在编译之前做了以下操作:
mv file.so file.so.backup另一种解决办法
另一个解决方案是将绝对符号链接更改为相对的符号链接。例如,如果您的库是/lib/arm-linux-gnueabihf/libglib.so.X,并且需要/usr/lib/arm-linux-gnueabihf/中的链接,那么只需:
ln -s ../../../lib/arm-linux-gnueabihf/libglib.so.X \
[sysroot]/usr/lib/arm-linux-gnueabihf/libglib.sohttps://stackoverflow.com/questions/19894541
复制相似问题