簡體   English   中英

在i.MX6的Qt5 OpenGL測試的交叉編譯期間發現了不兼容的libc.so.6

[英]Incompatible libc.so.6 Found During Cross-Compilation of Qt5 OpenGL Test for i.MX6

我正在嘗試為飛思卡爾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 ,但這似乎不是解決問題的好方法。

看來你正在編譯錯誤的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充當應用程序的新根文件夾。 這是在configure腳本的-sysroot選項中配置的。 這對gcc無效,因為-no-gcc-sysroot已啟用。 因此,鏈接器正在查找您的native / lib /文件夾以查找庫。 他們當然不在那里。

那么,你可以嘗試以下事項:

1)刪除configure腳本中的-no-gcc-sysroot選項。 再次配置並嘗試制作。

2)這可能會失敗,因為編譯器找不到它自己的組件。 請將編譯器的目錄安裝到chroot環境中。 運行下一個命令:

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

mount --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 /斌/ armv7a-VFP氖-狹小-Linux的gnueabi /臂-狹小-Linux的gnueabi-

祝你好運。 如果它正常工作,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM