查看: 10523|回复: 5

[求助] IMX6Q关于OpenGL的问题求助!!!

[复制链接]

该用户从未签到

1

主题

4

帖子

0

新手上路

Rank: 1

积分
33
最后登录
2017-1-5
发表于 2016-9-28 16:42:59 | 显示全部楼层 |阅读模式
        想请教各位大牛一个问题:现在我在IMX6Q上面移植QT,内核版本使用的是3.0.35,交叉编译工具使用的版本是4.9,由于需要用到OpenGL,在官网上下载OpenGL库后,却不能使用,大概原因是官网上面的OpenGL库是4.6版本的编译器编译出来的。如果我必须要使用4.9版本的编译器的话,怎么才能获取到相对应的OpenGL库??

我知道答案 目前已有5人回答
回复

使用道具 举报

  • TA的每日心情
    开心
    2016-10-28 10:25
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    1

    主题

    65

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    256
    最后登录
    2018-3-22
    发表于 2016-9-28 16:50:19 | 显示全部楼层
    你好,你可以尝试以下办法:
    1.去问问官方可不可以提供4.9的OpenGL库
    2.尝试自己编译4.9的OpenGL库
    3.直接用4.6的OpenGL库,把遇到的问题贴出来,分析
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    4

    帖子

    0

    新手上路

    Rank: 1

    积分
    33
    最后登录
    2017-1-5
     楼主| 发表于 2016-9-29 10:31:24 | 显示全部楼层
    魏科 发表于 2016-9-28 16:50
    你好,你可以尝试以下办法:
    1.去问问官方可不可以提供4.9的OpenGL库
    2.尝试自己编译4.9的OpenGL库

    用4.6的OpenGL库,在编译QT时,报以下错误:
    [img]C:/Users/Administrator/Desktop/error.png

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    4

    帖子

    0

    新手上路

    Rank: 1

    积分
    33
    最后登录
    2017-1-5
     楼主| 发表于 2016-9-29 10:41:01 | 显示全部楼层
    smile44199 发表于 2016-9-29 10:31
    用4.6的OpenGL库,在编译QT时,报以下错误:
    C:/Users/Administrator/Desktop/error.png

    图片传不上来,贴文字了...
    /opt/Embedsky/arm-cortexa9_neon-linux-gnueabihf/bin/../lib/gcc/arm-cortexa9_neon-linux-gnueabihf/4.9.1/../../../../arm-cortexa9_neon-linux-gnueabihf/bin/ld.gold: error: /usr/imx6_opengl/lib/libGLESv2.so uses VFP register arguments, output does not
    /opt/Embedsky/arm-cortexa9_neon-linux-gnueabihf/bin/../lib/gcc/arm-cortexa9_neon-linux-gnueabihf/4.9.1/../../../../arm-cortexa9_neon-linux-gnueabihf/bin/ld.gold: error: /usr/imx6_opengl/lib/libEGL.so uses VFP register arguments, output does not
    /opt/Embedsky/arm-cortexa9_neon-linux-gnueabihf/bin/../lib/gcc/arm-cortexa9_neon-linux-gnueabihf/4.9.1/../../../../arm-cortexa9_neon-linux-gnueabihf/bin/ld.gold: error: /usr/imx6_opengl/lib/libGAL.so uses VFP register arguments, output does not
    collect2: error: ld returned 1 exit status
    make[3]: *** [../../lib/libQt5Gui.so.5.4.1] Error 1
    make[3]: Leaving directory `/opt/Qt_5.4/qt5.4/build/build_arm/qtbase/src/gui'
    make[2]: *** [sub-gui-make_first] Error 2
    make[2]: Leaving directory `/opt/Qt_5.4/qt5.4/build/build_arm/qtbase/src'
    make[1]: *** [sub-src-make_first] Error 2
    make[1]: Leaving directory `/opt/Qt_5.4/qt5.4/build/build_arm/qtbase'
    make: *** [module-qtbase-make_first] Error 2
    root@Ubuntu-qh:build_arm#

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-28 10:25
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    1

    主题

    65

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    256
    最后登录
    2018-3-22
    发表于 2016-9-29 18:37:58 | 显示全部楼层
    本帖最后由 魏科 于 2016-9-29 19:14 编辑

    你好,很抱歉,回复晚了,

    看来情况还不是太糟糕!

    从你反馈的信息可以看出,编译这个OPENGL的工程师,对GCC指定了VFP浮点运算单元,

    但是你GCC编译器却没有指定浮点运算单元

    现在我们要做的是以下几点:
    0.先确保你用的gcc的前缀中带有gnueabihf关键字,hf表示支持硬件浮点运算单元
    1.GCC如何用VFP选项
    2.我们IMX6Q的是什么VFP
    3.我们IMX6Q的QT5编译有没有带VFP选项,如何在QT5中为IMX6Q添加VFP
    ----------------------------------------------
    0.我用的而是IMX6UL的GCC,前缀是:arm-linux-gnueabihf-,显然支持硬件浮点单元,
    你根据自己的情况确认一下。
    1.GCC如何用VFP选项,
    请使用命令(根据你的GCC来做)
    arm-linux-gnueabihf-gcc --target-help
    输出的一大堆信息中查找关键字:   "Known ARM FPUs" (区分大小写)
    里面有一连串的VPU选项,你可以看到GCC是通过-mfpu来指定需要的FPU
    大概有以下内容:
      Known ARM FPUs (for use with the -mfpu= option):
        crypto-neon-fp-armv8 fp-armv8 fpv4-sp-d16 neon neon-fp-armv8 neon-fp16
        neon-vfpv4 vfp vfp3 vfpv3 vfpv3-d16 vfpv3-d16-fp16 vfpv3-fp16 vfpv3xd
        vfpv3xd-fp16 vfpv4 vfpv4-d16
    另外还要注意几个小东西:-mfloat,大概有以下内容,后面会在QT5中用到:
    Known floating-point ABIs (for use with the -mfloat-abi= option):
        hard soft softfp
    2.确定IMX6Q的VFP是哪一个,这个要查看IMX6Q的Datasheet,如果在文档中没有找到合适的,诸如:
    vfpv3、vfpv4之类的字眼,那么可以设定-mfpu=neon,这是IMX6Q的普遍做法
    3.对于QT5的IMX6编译配置文件路径是:
    qtbase/mkspecs/devices/linux-imx6-g++/qmake.conf
    里面对GCC的编译配置是这样写的:
    IMX6_CFLAGS   = -march=armv7-a -mfpu=neon -DLINUX=1 -DEGL_API_FB=1
    DISTRO_OPTS += hard-float
    从这个地方可以看出
    QT5对IMX6已经添加了-mfpu=neon和-mfloat-abi=hard
    所以没问题,但是你为什么出错了呢,可能原因如下:
    1.在做QT5的configure的时候,没有按照套路走,若要启用devices下的这个linux-imx6-g++的套路
    需要在configuure时添加 -devices imx6和 -device-option CORSS_COMPILES=..之类的
    这个请用你的智慧去鉴别一下,我这里因为没有IXM6Q的板子,没有办法去确定。
    2.-mfpu=neon和你的OPENGL的库的-mfpu=不一样,你可以在上述qmake.conf的地方
    尝试-mfpu=neon-fp16 或者 -mfpu=neon-vfpv4,这个我真的不能确定,靠你去参考IMX6Q的Datasheet对浮点数的描述进行鉴别
    确定这些以后,我觉得你的编译一定能够成功,
    另外,在google上也有人遇到同样的问题,
    请搜索关键字“libGLESv2.so uses VFP register arguments”
    还有,回复框的右上角有一个“高级模式”,可以进入该模式,插入图片。
    请继续跟进,谢谢。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    4

    帖子

    0

    新手上路

    Rank: 1

    积分
    33
    最后登录
    2017-1-5
     楼主| 发表于 2016-9-30 13:58:11 | 显示全部楼层
    魏科 发表于 2016-9-29 18:37
    你好,很抱歉,回复晚了,

    看来情况还不是太糟糕!

    非常感谢您的关注与回复!

    0:我使用的GCC是:arm-cortexa9_neon-linux-gnueabihf-gcc,
       根据您的回复,该GCC是支持硬件浮点运算单元的。

    1:在QT5的移植过程中我没有走qtbase/mkspecs/devices/linux-imx6-g++/qmake.conf这条路。
       我是在qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf进行配置的。
       具体的配置如下:

    #
    # qmake configuration for building with arm-linux-gnueabi-g++
    #

    MAKEFILE_GENERATOR            = UNIX
    CONFIG                                     += incremental
    QMAKE_INCREMENTAL_STYLE  = sublib

    QT_QPA_DEFAULT_PLATFORM = eglfs
    QMAKE_CFLAGS_RELEASE      += -O2 -march=armv7-a -mfpu=neon -DLINUX=1 -DEGL_API_FB=1
    QMAKE_CXXFLAGS_RELEASE  += -O2 -march=armv7-a -mfpu=neon -DLINUX=1 -DEGL_API_FB=1

    DISTRO_OPTS += hard-float

    include(../common/linux.conf)
    include(../common/gcc-base-unix.conf)
    include(../common/g++-unix.conf)

    # modifications to g++.conf
    #QMAKE_CC                  = /opt/Embedsky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin/arm-fsl-linux-gnueabi-gcc
    #QMAKE_CXX                = /opt/Embedsky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin/arm-fsl-linux-gnueabi-g++
    #QMAKE_LINK               = /opt/Embedsky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin/arm-fsl-linux-gnueabi-g++
    #QMAKE_LINK_SHLIB    = /opt/Embedsky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin/arm-fsl-linux-gnueabi-g++

    QMAKE_CC                   = /opt/Embedsky/arm-cortexa9_neon-linux-gnueabihf/bin/arm-cortexa9_neon-linux-gnueabihf-gcc
    QMAKE_CXX                 = /opt/Embedsky/arm-cortexa9_neon-linux-gnueabihf/bin/arm-cortexa9_neon-linux-gnueabihf-g++
    QMAKE_LINK                = /opt/Embedsky/arm-cortexa9_neon-linux-gnueabihf/bin/arm-cortexa9_neon-linux-gnueabihf-g++
    QMAKE_LINK_SHLIB     = /opt/Embedsky/arm-cortexa9_neon-linux-gnueabihf/bin/arm-cortexa9_neon-linux-gnueabihf-g++

    # modifications to linux.conf
    #QMAKE_AR                 = /opt/Embedsky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin/arm-fsl-linux-gnueabi-ar cqs
    #QMAKE_OBJCOPY       = /opt/Embedsky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin/arm-fsl-linux-gnueabi-objcopy
    #QMAKE_NM                 = /opt/Embedsky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin/arm-fsl-linux-gnueabi-nm -P
    #QMAKE_STRIP             = /opt/Embedsky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin/arm-fsl-linux-gnueabi-strip

    QMAKE_AR                 = /opt/Embedsky/arm-cortexa9_neon-linux-gnueabihf/bin/arm-cortexa9_neon-linux-gnueabihf-ar cqs
    QMAKE_OBJCOPY       = /opt/Embedsky/arm-cortexa9_neon-linux-gnueabihf/bin/arm-cortexa9_neon-linux-gnueabihf-objcopy
    QMAKE_NM                 = /opt/Embedsky/arm-cortexa9_neon-linux-gnueabihf/bin/arm-cortexa9_neon-linux-gnueabihf-nm -P
    QMAKE_STRIP             = /opt/Embedsky/arm-cortexa9_neon-linux-gnueabihf/bin/arm-cortexa9_neon-linux-gnueabihf-strip

    QMAKE_INCDIR_OPENGL  =  /usr/imx6_opengl/include
    QMAKE_LIBDIR_OPENGL   =  /usr/imx6_opengl/lib
    QMAKE_LIBS_OPENGL       =  /usr/imx6_opengl/lib

    QMAKE_LIBS_OPENGL_ES1       +=  -lGLESv1_CM -lEGL -lGAL
    QMAKE_LIBS_OPENGL_ES1CL   += -lGLES_CL -lEGL -lGAL
    QMAKE_LIBS_EGL                      += -lEGL
    QMAKE_LIBS_OPENGL_ES2       += -lGLESv2 -lEGL -lGAL
    QMAKE_LIBS_OPENVG               += -lOpenVG -lEGL -lGAL

    load(qt_config)


    2:QT5的configure如下:
    configure -v \
            -opensource \
            -confirm-license \
            -prefix ${CURRENT_DIR}/__install \
            -release \
            -make libs \
            -xplatform linux-arm-gnueabi-g++ \
            -optimized-qmake \
            -pch \
            -qt-sql-sqlite \
            -qt-zlib \
            -no-sse2 \
            -no-openssl \
            -no-nis \
            -no-cups \
            -no-glib \
            -no-pkg-config \
            -no-xfixes \
            -no-xrandr \
            -no-xrender \
            -no-separate-debug-info \
            -make examples \
            -nomake tools \
            -c++11 \
            -dbus \
            -qreal float \
            -no-iconv \
            -qpa eglfs \
            -opengl -I/usr/imx6_opengl/include -L/usr/imx6_opengl/lib

    3:根据您的回复,我也做了稍微的修改,-mfpu的值换了几个(Datasheet上面提到的是neon和vfp3都试过)
       也还是会出现同样的错误。另外,我用以上的configure和qmake.conf,只是将qmake.conf中的换成官方
       提供的arm-fsl-linux-gnueabi-gcc就可以编译成功,因此我个人认为qmake.conf和configure应该是没有问题的,
       可能还是opengl库和编译器不匹配的问题。


    4:现在我的想法是能不能通过官方提供的3.0.35版本的ltib,
       在编译的时候指定CROSS_COMPILE为arm-cortexa9_neon-linux-gnueabihf-gcc,
       不知道能否得到相对应的opengl库。
       由于之前没使用过ltib,因此还想向您确认一下。

       谢谢!

    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-9 22:19 , Processed in 0.100901 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表