qt的cross comple相关

一 window平台编译

先将 MinGW 或者Visual Studio toolchains的编译器加到环境变量中去。

configure.bat -platform win32-g++
configure.bat -platform win32-msvc

二 window平台交叉编译arm版Qt

  1. 先配置好g++和arm-linux-g++
  2. 更改mkspecs里的linux-arm-gnueabi-g++项目,前缀与你的交叉编译器要致。
  3. 配置注意事项,-platform指定编译主机生成主机上可运行的qmake.exe,-xplatform指定交叉编译的目标平台,-device-option指定交叉编译器。
    ./configure -platform win32-g++ \
    -xplatform linux-arm-gnueabi-g++ \
    -device-option CROSS_COMPILE=arm-linux-gnueabi-
    -prefix /d/Qt/dir
    ...
    
    1. make工具可以直接使用qtcreator中的mingw32-make.exe

三 linux平台交叉编译window的QT

参考使用MXE
这里有篇参考就不写了
Linux下编译静态MinGW环境,编译windows平台Qt程序(使用MXE)
编译好后设置qt kit

  1. 设置qmake
    mxe/usr/x86_64-w64-mingw32.static/qt5/bin/qmake
  2. 设置编译器
    mxe/usr/bin/x86_64-w64-mingw32.static-gcc
    mxe/usr/bin/x86_64-w64-mingw32.static-g++
    
    在ABI中行选中自定义,设置如下
    x86-windows-msys-pe-64bit
  3. 设置kit

ok,现在可以使用qtcreator编译window的exe了。

其它

  1. You cannot configure qt separately within a top-level build
    在build目录下创建 .qmake.stash和 .qmake.super两个空文件。

  2. 安装目录指定说明

     -prefix  qt库在目标板device上的安装目录
     -extprefix qt库编译主机host上的安装目录
    
  3. 编译平台指定

     -platform //指定编译主机host
     -xplatform/device //指定交叉编译device
     -device-option CROSS_COMPILE=arm-linux-   //指定交叉编译器前缀
    
  4. OpenGL ES 2.0 disabled

    ERROR: Feature 'opengles2' was enabled, but the pre-condition 'config.win32 || (!config.watchos && !features.opengl-desktop && libs.opengl_es2)' failed.
    
    ERROR: Feature 'eglfs' was enabled, but the pre-condition '!config.android && !config.darwin && !config.win32 && features.egl' failed.
    
    ERROR: The OpenGL functionality tests failed!
    You might need to modify the include and library search paths by editing QMAKE_INCDIR_OPENGL[_ES2],
    QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your platform.
    
    Check config.log for details.
    
    

    查看config.log中相应的错误,

    • 方法1 在devices/linux-imx6-g++/qmake.conf中增加QMAKE_INCDIR_OPENGL_ES2,QMAKE_LIBDIR_OPENGL_ES2两变量如下:

      	include(../common/linux_device_pre.conf)
      
      	#GPU_VIV_SDK = /opt/EmbedSky/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/qt5.5/rootfs_imx6q_V3_qt5.5_env/
      	GPU_VIV_SDK = /home/anzye/Workspace/imx/gpu-viv-sdk
      	QMAKE_INCDIR_OPENGL = $$GPU_VIV_SDK/usr/include
      	QMAKE_LIBDIR_OPENGL = $$GPU_VIV_SDK/usr/lib
      	QMAKE_INCDIR_OPENGL_ES2 = $$QMAKE_INCDIR_OPENGL
      	QMAKE_LIBDIR_OPENGL_ES2 = $$QMAKE_LIBDIR_OPENGL
      	QMAKE_INCDIR_EGL        = $$QMAKE_INCDIR_OPENGL
      	QMAKE_LIBDIR_EGL        = $$QMAKE_LIBDIR_OPENGL
      	QMAKE_INCDIR_OPENVG     = $$QMAKE_INCDIR_OPENGL
      	QMAKE_LIBDIR_OPENVG     = $$QMAKE_LIBDIR_OPENGL
      
      	
      	QMAKE_LIBS_EGL         += -lEGL -GAL
      	QMAKE_LIBS_OPENGL_ES2  += -lGLESv2 -lEGL -lGAL
      	QMAKE_LIBS_OPENVG      += -lOpenVG -lEGL -lGAL
      	
      	IMX6_CFLAGS             = -march=armv7-a -mfpu=neon -DLINUX=1 -DEGL_API_FB=1
      	QMAKE_CFLAGS           += $$IMX6_CFLAGS
      	QMAKE_CXXFLAGS         += $$IMX6_CFLAGS
      	                                                                                                                                       
      	DISTRO_OPTS += hard-float  
      	
      	# Preferred eglfs backend
      	EGLFS_DEVICE_INTEGRATION = eglfs_viv
      	
      	include(../common/linux_arm_device_post.conf)
      	
      	load(qt_config)           
      

      注意事项,QMAKE_INCDIR_OPENGL_ES2只需包含到include目录,别写到GLES2目录去了,查看config.log的错误原因是找不到文件GLES2/gl2.h

      配置好后在.configure时依然会错,这次再查看config.log,此时错误提示为ld找不到lib/libc_nonshared.a,ld-linux-armhf.so.3等几个库文件,需要设置下-sysroot变量使其能正常ld到库。如下

         ./configure -prefix /usr/imx/qt5 -extprefix /opt/arm_lib/qt5 \
         	-sysroot /opt/EmbedSky/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/qt5.5/rootfs_imx6q_V3_qt5.5_env \
             -platform linux-g++ \
             -device linux-imx6-g++ \
            -device-option CROSS_COMPILE=arm-linux- \
             -opensource \
             -confirm-license \
             -static \
             -strip \                                                                                                                           
             -silent \
             -opengl es2 \
             -qpa eglfs \
             -eglfs \
             -optimized-qmake \
             -no-cups -no-iconv -no-pch -no-gbm -no-gtk \
            -skip qt3d \
            -skip qtactiveqt \
            -skip qtandroidextras \
            -skip qtcanvas3d \
            -skip qtdatavis3d \
            -skip qtmacextras \
            -skip qtwinextras \
            -skip qtgamepad \
            -skip qtdoc \
            -nomake tools -nomake examples -nomake tests
      

      注意,每次configure时,把前面的清空才行

    • 方法2 直接在configure时加上**-I -L**参数指定sdk目录。

      ../configure -prefix /usr/lib/qt5 -extprefix /opt/EmbedSky/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/qt5 \
      	-platform linux-g++ \
      	-device linux-imx6-g++ \
          -device-option CROSS_COMPILE=arm-linux-gnueabihf- \
      	-L "/home/anzye/Workspace/imx/gpu-viv-sdk/usr/lib" \
      	-I "/home/anzye/Workspace/imx/gpu-viv-sdk/usr/include" \
      

    如果没有Opengl es库也可参照QT移植

    B) Opengl ES库: gpu-viv-bin-mx6q-3.10.17-1.0.0.tar.gz 下载地址为:
    http://repository.timesys.com/buildsources/g/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q-3.10.17-1.0.0/
    或到Qter开源社区下载。 下载后使用如下命令进行解压:
    tar xvzf gpu-viv-bin-mx6q-3.10.17-1.0.0.tar.gz
    解压完成后进入gpu-viv-bin-mx6q-3.10.17-1.0.0目录,该目录中有以下内容:
    其中hardfp中的内容是我们需要的。把hardfp目录下的usr目录拷贝到/opt/tqexlib/目录下,此目录是自己定义的,读者可以拷贝到其它目录下,只需要在后边修改Qt的编译配置文件的时候设置正确就可以了。

    下载GPU驱动指定该目录,如上可不用指定-sysroot了,如果出现未定义的引用"gcoXX_XXXX",注意修改QMAKE_LIBS_EGL += -lEGL -GAL

  5. FT_Get_Font_Format ld时未定义
    libfreetype库的问题,检查发现即使我使用的是-qt-freetype,在ld时依旧提示譔错误,查找发现qt第三方库的libqtfreetype.*版本已经编译出来,ld找不到,怀疑ld到sysroot指定的编译器的libfreetype.so去了,将libqtfreetype.so/a拷贝到编译器库目录去。再编译ok

  6. qt环境变量

      #!/bin/sh
    
    ##qt5.9.1-arm
    export QT_ROOT=/usr/imx/qt5 #如果是放在configure时配置的prefix目录,则可以省去下面的一些配置了
    export PATH=$QTDIR/bin:$PATH
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QT_ROOT/lib
    export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
    export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
    export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
    export QML2_IMPORT_PATH=$QT_ROOT/qml
    export QT_QPA_PLATFORM=eglfs
    export QT_EGLFS_IMX6_NO_FB_MULTI_BUFFER=2
    export QT_QPA_EGLFS_PHYSICAL_WIDTH=698             #根据你的显示器设置宽度,单位mm
    export QT_QPA_EGLFS_PHYSICAL_HEIGHT=392           #根据你的显示器设置高度,单位mm
    
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值