11

RPI 用に Qt 5 ライブラリをコンパイルしようとしていますが、常にクラッシュします。

これらは私が従おうとしたガイドです:

http://qt-project.org/wiki/RaspberryPi_Beginners_guide
http://qt-project.org/wiki/RaspberryPi

ガイドに従ってクロスコンパイラと sysroot-image をダウンロードし、git リポジトリから Qt5 ソースを取得しました。

ガイドの1つに従った後、私は今立ち往生していmakeます。

これは私が受け取っているエラーです:

.obj/release-shared/qlibrary_unix.o: In function `QLibraryPrivate::load_sys()':
qlibrary_unix.cpp:(.text+0xf84): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/home/esa/qtonpi/rpi_image/usr/lib/arm-linux-gnueabihf/libdl.a(dlopen.o): In function `dlopen':
(.text+0xc): undefined reference to `__dlopen'
/home/esa/qtonpi/rpi_image/usr/lib/arm-linux-gnueabihf/libdl.a(dlclose.o): In function `dlclose':
(.text+0x0): undefined reference to `__dlclose'
/home/esa/qtonpi/rpi_image/usr/lib/arm-linux-gnueabihf/libdl.a(dlsym.o): In function `dlsym':
(.text+0xc): undefined reference to `__dlsym'
/home/esa/qtonpi/rpi_image/usr/lib/arm-linux-gnueabihf/libdl.a(dlerror.o): In function `dlerror':
(.text+0x0): undefined reference to `__dlerror'
/home/esa/qtonpi/rpi_image/usr/lib/arm-linux-gnueabihf/libm.a(feholdexcpt.o): In function `feholdexcept':
(.text+0x48): undefined reference to `_dl_hwcap'
/home/esa/qtonpi/rpi_image/usr/lib/arm-linux-gnueabihf/libm.a(fesetenv.o): In function `fesetenv':
(.text+0x64): undefined reference to `_dl_hwcap'
collect2: virhe: ld:n paluuarvo oli 1                                           # collect2: error: ld returnvalue was 1
make[2]: *** [../../lib/libQt5Core.so.5.0.0] Virhe 1                            # Error 1
make[2]: Poistutaan hakemistosta "/home/esa/qtonpi/qt5/qtbase/src/corelib"      # Leaving directory
make[1]: *** [sub-corelib-make_first] Virhe 2                                   # Error 2
make[1]: Poistutaan hakemistosta "/home/esa/qtonpi/qt5/qtbase/src"              # Leaving directory
make: *** [sub-src-make_first] Virhe 2                                          # Error 2
4

5 に答える 5

12

sysroot 内のライブラリのパスを修正します。一部のライブラリは、システムに配置すると壊れる絶対パスへのシンボリック リンクです。/home/esa/qtonpi/rpi_image/usr/lib/arm-linux-gnueabihf/libdl.so などを確認してください。これらは、絶対パスへの壊れたシンボリック リンクであることがわかります。それらをすべて修正します。あなたが報告したドキュメントでは、この目的のためのスクリプトが提供されています。実行しましたか ( https://gitorious.org/cross-compile-tools/cross-compile-tools/blobs/master/fixQualifiedLibraryPaths )?

それでも問題が発生する場合は、これも確認してください。wheezy イメージの git から最近のバージョンをコンパイルするメモをいくつか書き留めました。

于 2012-11-29T13:31:21.830 に答える
3

既存の両方の回答を試してもうまくいかなかった人への回答:

ダウンロードした Raspbian イメージのフォルダーに libdl と libdm のシンボリック リンクが含まれていない場合があり/usr/lib/ます。

その場合、fixQualifiedLibraryPaths はシンボリック リンクを見つけることができないため、役に立ちません。たとえば、フラッシュ ドライブを使用して既存の Raspberry Pi からデータをコピーする場合、データはシンボリック リンクとしてコピーされず、ライブラリ自体がコピーされますlibdl.solibm.soただし、ビルドを成功させるには、シンボリック リンクが必要なようです。

私は何を見てlibdl、私のRaspberry Piポイントlibdmのフォルダで/usr/lib/

cd /usr/lib/arm-linux-gnueabihf/
ls -l libld.so libm.so

見つかったファイルがシンボリックリンクではなく通常のファイルになるまで、同じことを行います。

libdl-2.13.so私のシステムでは、それらは呼び出され、代わりにlibm-2.13.so存在することが判明しました/lib/arm-linux-gnueabihf//usr/lib/...

PC に戻ると、これらの正確なファイルが/lib/arm-linux-gnueabihf/フォルダー内に見つかりました (見つからない場合は、Raspberry Pi からコピーできます)。/usr/lib/arm-linux-gnueabihf/そこで、フォルダーにそれらのシンボリックリンクを作成しました:

sudo ln -s /lib/arm-linux-gnueabihf/libdl-2.13.so /usr/lib/arm-linux-gnueabihf/libdl.so
sudo ln -s /lib/arm-linux-gnueabihf/libm-2.13.so /usr/lib/arm-linux-gnueabihf/libm.so

この後、qtbase は正常にコンパイルされました。

(注: Qt からクロスコンパイルを続けるには、SD カードのイメージを PC にマウントしたままにしておく必要があります (ガイドの説明に従って)。しかし、それだけでは十分ではありません。Qt を起動する前にマウントする必要があります。作成者)

于 2015-10-21T08:25:52.667 に答える
2

これを試して

ln -s /mnt/raspberry-rootfs/lib/arm-linux-gnueabihf /lib/

基本的に、上のsoファイルPiをリンクしたときに絶対パスが指定されているよう(/lib/)で、/mnt/raspberry-rootfsそれらが壊れています。

Pi/lib/arm-linux-gnueabihfを PC の/libディレクトリにリンクすると、間違ったリンクが修正され、QT がコンパイルできるようになります。それは汚いトリックですが、うまくいきます。

libdl/ libmを持っていない場合はPi、SD カードを に戻しPi、起動してインストールする必要があります。明らかに、SD カードから PC に新しいイメージを作成し、マウントする必要があります。/mnt/raspberry-rootfs

于 2015-11-18T16:20:40.087 に答える