【问题标题】:Incompatible libc.so.6 Found During Cross-Compilation of Qt5 OpenGL Test for i.MX6在交叉编译 i.MX6 的 Qt5 OpenGL 测试期间发现不兼容的 libc.so.6
【发布时间】:2013-06-07 15:21:46
【问题描述】:

我正在尝试为飞思卡尔 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,但这似乎不是解决问题的好方法。

【问题讨论】:

    标签: linux qt linker cross-compiling symlink


    【解决方案1】:

    您似乎正在针对错误的 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 选项中配置的。这对 gcc 无效,因为 -no-gcc-sysroot 已打开。因此,链接器正在查找您的本机 /lib/ 文件夹以查找库。他们当然不在那里。

    那么,您可以尝试以下方法吗:

    1) 删除配置脚本中的 -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/images/mountpoint/usr/bin

    重新配置再尝试制作。

    3) 如果还是不行,说明交叉编译器设置不正确。将 CROSS_COMPILE 参数更改为配置脚本参数列表:

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

    祝你好运。让我知道它是否有效。

    【讨论】:

    • 感谢您的回复。在使用配置脚本的帮助选项后,我今天早些时候自己发现了这一点,希望这对其他人有帮助。不过我必须问,为什么我看过的所有指南都建议使用 -no-gcc-sysroot 选项:community.freescale.com/docs/DOC-94066 我什至从飞思卡尔工程师那里得到了同样的建议?
    猜你喜欢
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多