锋影
email:174176320@qq.com
如果你认为本系列文章对你有所帮助,请大家有钱的捧个钱场,点击此处赞助,赞助额0.1元起步,多少随意
声明:本文只用于个人学习交流,若不慎造成侵权,请及时联系我,立即予以改正
网上有一篇针对qt 4的 针对的是qnx6.6,很多配置参数也对应不上,总结一下我移植qt 5.9.7 到qnx7.0的过程
移植qt4.8到qnx
首先我的系统是Ubuntu 16.04.02 + qnx 7.0 + qt 5.9.7
1.准备工作:
1.1 ubuntu 系统自行下载安装, qnx7.0 自行配置安装;
1.2 qt 5.9.7 源码包下载:
http://download.qt.io/archive/qt/5.9/5.9.7/single/
选择qt-everywhere-opensource-src-5.9.7.tar.xz
下载 源码解压到你的某个目录下面如 ~/Download/qt/qt-everywhere-opensource-src-5.9.7
1.3 配置 qnx 环境变量:
如果你是bash环境,直接运行 source ~/qnx700/qnxdsp-env.sh
然后运行echo $PATH 查看 qnx环境变量是否设置成功
如果 你像我用的zsh 环境,可以切换成bash 运行上面命令,我的做法是 vim ~/.zshrc 在最下面添加如下几行
export QNX_HOST=/home/panda/qnx700/host/linux/x86_64
export QNX_TARGET=/home/panda/qnx700/target/qnx7
export MAKEFLAGS=-I/home/panda/qnx700/target/qnx7/usr/include
export QNX_CONFIGURATION=/home/panda/.qnx
export PATH=$PATH:/home/panda/qnx700/host/linux/x86_64/usr/bin:/home/panda/.qnx/bin:/home/panda/jre/bin
注意: 其中的路径需要改为自己系统的安装路径
然后source ~/.zshrc
echo $QNX_TARGET 查看qnx 环境变量是否设置成功
2. 编译 qt
2.1 首先进到qt 源码目录下配置 编译选项 也可以新建个autoconfig.sh脚本执行配置.
cd ~/Download/qt/qt-everywhere-opensource-src-5.9.7/
./configure -opensource -confirm-license -shared -release -xplatform qnx-armle-v7-qcc -no-rpath -reduce-exports -system-sqlite -continue -no-openssl -nomake examples -nomake tests -force-debug-info -separate-debug-info -prefix /opt/qt5.9.7
参数解释 :
-opensource 创建开源版本的qt
-confirm-license自动确认许可
-release 发行版本
-shared 创建并链接QT共享库
-xplatform 选择交叉编译目标板mkspec
-no-rpath 较难理解 不使用库安装路径作为一个运行时库路径
-reduce-exports 减少信息打印
-system-sqlite
-no-openssl SSL,Security Socket Layer,是一个安全传输协议,在Internet网上进行数据保护和身份确认,而OpenSSL是一个开放源代码的实现了SSL及相关加密技术的软件包,在qt中,我们可以选择直接支持,或者OpenSSL链接支持,这个参数也是为有需要者提供的。
-nomake 选择不编译某些模块
-continue 发生错误,编译继续,最后处理错误
-force-debug-info 即使在调试版本中也进行优化
-separate-debug-info 将调试信息到一个单独的文件
-prefix 默认安装路径
sudo make install #make install 的时候出现问题,问题解决请参考文后
make -j4 //大约编译了1个小时(thinkpadT470)
注意:qnx-armle-v7-qcc 是针对arm32位系统,由于项目需要,我特别编译了aarchle64 和x86-64 位系统的 编译成功
2.2 configure 配置完成
3. 将生成的库拷贝到目标qnx 系统中
目标板中usr下新建qt5目录 将生成的libs plugins和 qml 三个文件夹拷贝过来,为了避免软链接问题,可以压缩拷贝再解压.
目标板设置qt的环境变量,可以写到/etc/profile中,也可以自己写个脚本,执行应用程序的时候再加载;在profile 中添加如下
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/qt5/lib
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/qt5/plugins
export QT_PLUGIN_PATH=/usr/qt5/plugins
export QML2_IMPORT_PATH=/usr/qt5/qml
4. 在本机上新建一个qt-qnx 工程, 将生成的exe 拷贝到目标板,运行,会提示需要什么库,然后从交叉编译的工具库中拷贝过去.
具体的本机如何配置新编译的qt-for-qnx 工具链在下一篇博客中详细介绍.同时介绍如何在目标板正确执行qt 程序以及中文的支持等.
附上链接:QNX7.0 平台QT开发环境配置(详细)
错误备注:
sudo make install。由于安装到系统目录/opt/qt5.9.7,所以加了sudo执行。就这步,出现了问题:
make[1]: ntoarmv7-ranlib: Command not found
检索发现ntoarmv7-ranlib可以在系统的qnx PATH中找到,因为我已经把qnx 环境变量添加到了PATH中。
那为什么还提示说找不到ntoarmv7-ranlib呢?
原因如下:
1.我添加arm交叉编译器目录到PATH中是放在~/.zshrc里的,这是用户的配置文件,我的用户为panda。
2.执行make install时,加了sudo前缀,变成了root的工作环境和root的权限。
根据以上两点,make install是在root下做的,而ntoarmv7-ranlib在panda用户的工作环境中才能找到。所以产生了这里的错误。
那我既要取得root权限,又要具有当前用户yan的工作环境,怎办呢?
解决如下:
执行make install之前,先用下sudo -i命令取得root权限。然后再执行make install。
su 和 sudo 的区别:
1.共同点:都是root用户的权限;
2.不同点:su仅仅取得root权限,工作环境不变,还是在切换之前用户的工作环境;sudo是完全取得root的权限和root的工作环境。
注意:sudo su切换到root时原用户的环境变量也一并丢失。应使用sudo -i
索性就手动添加PATH环境变量
export PATH=$PATH:/home/panda/Downloads/arm/gcc-linaro-arm-linux-gnueabihf-4.9/bin/
export QNX_HOST=/home/panda/qnx700/host/linux/x86_64
export QNX_TARGET=/home/panda/qnx700/target/qnx7
export MAKEFLAGS=-I/home/panda/qnx700/target/qnx7/usr/include
export QNX_CONFIGURATION=/home/panda/.qnx
export PATH=$PATH:/home/panda/qnx700/host/linux/x86_64/usr/bin:/home/panda/.qnx/bin:/home/panda/jre/bin
然后make install,安装成功
参考链接:
http://community.qnx.com/sf/discussion/do/listPosts/projects.qt/discussion.general.topc27009
https://blog.csdn.net/zxpcus/article/details/79310288
https://wiki.qt.io/Building_Qt_for_QNX_Neutrino_OS
---------------------
作者:oadaaa
来源:CSDN
原文:https://blog.csdn.net/p942005405/article/details/83616590
版权声明:本文为博主原创文章,转载请附上博文链接!