*i.MX6Q` を搭載したNitrogen6x ボードで Qt 5 をビルドしようとしています。
ボードにDebian/wheezyをインストールし、クロスコンパイルにUbuntu 12.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
これは、make プロセスの約 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 にアクセスしようとしたときに同じエラーが発生しましたが、configure コマンドに qt-zlib パラメータを追加すると、その問題が修正されました。
多くの記事では、影響を受けるアプリケーション/ライブラリを再コンパイルする必要があると述べていますが、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 は、ボードの製造元である Boundarydevices が提供するカーネルとオーバーレイだけでなく、公式のネットワーク インストーラを使用してインストールされています。
これを修正する方法を知っている人はいますか?
私の次のステップは、完全に新しい Debian システムをインストールすることですが、それは避けたいと思っています。
編集
-static オプションを指定して qtbase をコンパイルするとうまくいきますが、make ステップで qtdeclarative をビルドしようとすると、次のエラーが発生します。
/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を再インストールすることだけでした。確かにエレガントなソリューションではありませんが、私にとってはうまくいきます。