1

Freescale i.MX6 プロセッサ用に Qt5 をクロスコンパイルしようとしています。最新の Yocto パッケージを使用してイメージを作成済みです。

qtbase をコンパイルする前に、最初に OpenGL コードをコンパイルして OpenGL 機能のテストを実行します。ただし、このテスト中に、コンパイラは互換性のないものlibc.so.6が見つかったと不平を言います。

別の投稿 (現時点では見つけられません) で、このようなエラーが発生する/lib/libc.so.6のは、実際の共有オブジェクト ファイルを指すシンボリック リンクであることを発見しました。ただし、コンパイラは が指す共有オブジェクト ファイルを使用せずlibc.so.6、代わりにシンボリック リンク自体にリンクしようとするため、互換性の問題が発生します。

configureスクリプトを実行したときの出力は次のとおりです。

OpenGL ES 2.x auto-detection... ()
/home/Desktop/poky-dylan-9.0.0/build/tmp/sysroots/x86_64-linux/usr/bin/armv7a-vfp-neon-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++ -c -pipe -mfloat-abi=softfp -O2 -O2 -march=armv7-a -mfpu=neon -DLINUX=1 -DEGL_API_FB=1 -Wall -W -fPIE  -I../../../mkspecs/devices/linux-imx6-g++ -I. -I/home/Desktop/poky-dylan-9.0.0/build/tmp/deploy/images/mountpoint/usr/include -o opengles2.o opengles2.cpp
/home/Desktop/poky-dylan-9.0.0/build/tmp/sysroots/x86_64-linux/usr/bin/armv7a-vfp-neon-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++ -Wl,-rpath-link,/home/Desktop/poky-dylan-9.0.0/build/tmp/deploy/images/mountpoint/usr/lib -Wl,-O1 -o opengles2 opengles2.o   -L/home/Desktop/poky-dylan-9.0.0/build/tmp/deploy/images/mountpoint/usr/lib -lGLESv2 -lEGL -lGAL 
/home/Desktop/poky-dylan-9.0.0/build/tmp/sysroots/x86_64-linux/usr/libexec/armv7a-vfp-neon-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.7.2/ld: skipping incompatible /lib/libc.so.6 when searching for /lib/libc.so.6
/home/Desktop/poky-dylan-9.0.0/build/tmp/sysroots/x86_64-linux/usr/libexec/armv7a-vfp-neon-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.7.2/ld: cannot find /lib/libc.so.6
/home/Desktop/poky-dylan-9.0.0/build/tmp/sysroots/x86_64-linux/usr/libexec/armv7a-vfp-neon-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.7.2/ld: skipping incompatible /usr/lib/libc_nonshared.a when searching for /usr/lib/libc_nonshared.a
/home/Desktop/poky-dylan-9.0.0/build/tmp/sysroots/x86_64-linux/usr/libexec/armv7a-vfp-neon-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.7.2/ld: cannot find /usr/lib/libc_nonshared.a
/home/Desktop/poky-dylan-9.0.0/build/tmp/sysroots/x86_64-linux/usr/libexec/armv7a-vfp-neon-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.7.2/ld: cannot find /lib/ld-linux.so.3
collect2: error: ld returned 1 exit status
gmake: *** [opengles2] Error 1
OpenGL ES 2.x disabled.
The OpenGL ES 2.0 functionality test failed!

スクリプトに適切なオプションを提供するために使用したconfigureスクリプトは次のとおりです。

#!/bin/sh
./configure -v -opensource -confirm-license -no-pch -opengl es2 \
        -make libs -device imx6 \
        -make examples -make demos \
        -device-option CROSS_COMPILE=/home/Desktop/poky-dylan-9.0.0/build/tmp/sysroots/x86_64-linux/usr/bin/armv7a-vfp-neon-poky-linux-gnueabi/arm-poky-linux-gnueabi- \
        -sysroot /home/Desktop/poky-dylan-9.0.0/build/tmp/deploy/images/mountpoint -no-gcc-sysroot \
        -prefix /opt/qt5

現時点では、実際の共有オブジェクト ファイルの名前をlibc.so.6.

4

1 に答える 1

4

間違った libc に対してコンパイルしているようです。正しい libc の場所は次のようになります: /home/Desktop/poky-dylan-9.0.0/build/tmp/deploy/images/mountpoint/lib/ 確認できますか? そのフォルダーで実行します。

ファイル libc.so.6

アーキテクチャに問題がないか確認してください。目の前に情報源がないので、うまくいかない場合はフィードバックをお願いします。

アプリケーションは chroot 環境でコンパイルされます (man chroot を参照)。フォルダー /home/Desktop/poky-dylan-9.0.0/build/tmp/deploy/images/mountpoint は、アプリケーションの新しいルートフォルダーとして機能します。これは、構成スクリプトの -sysroot オプションで構成されます。-no-gcc-sysroot がオンになっているため、これは gcc には無効です。そのため、リンカーはネイティブの /lib/ フォルダーを探してライブラリを見つけます。もちろん、彼らはそこにいません。

では、次のことを試していただけますか。

1) configure スクリプトの -no-gcc-sysroot オプションを削除します。もう一度設定して、作ってみてください。

2) コンパイラが独自のコンポーネントを見つけられないため、これは失敗する可能性があります。コンパイラのディレクトリを chroot 環境にマウントしてください。次のコマンドを実行します。

mkdir /home/Desktop/poky-dylan-9.0.0/build/tmp/deploy/images/mountpoint/usr/bin -p

マウント --bind /home/Desktop/poky-dylan-9.0.0/build/tmp/sysroots/x86_64-linux/usr/bin/ /home/Desktop/poky-dylan-9.0.0/build/tmp/deploy/イメージ/マウントポイント/usr/bin

もう一度設定して、もう一度試してみてください。

3) それでも動かない場合は、クロスコンパイラが正しく設定されていません。CROSS_COMPILE 引数を構成スクリプト引数リストに変更します。

CROSS_COMPILE=/usr/bin/armv7a-vfp-neon-poky-linux-gnueabi/arm-poky-linux-gnueabi-

がんばって。機能しているかどうかを教えてください。

于 2013-06-10T22:02:12.603 に答える