工作中,利用petalinux软件编译了xilinx fpga的arm linux系统,在配置时选择了添加qt5。
在pc机ubuntu中工作时,直接apt安装的qt5,在编译opencv的时候选择-D WITH_QT=ON就直接编译成功,可以使用opencv的imshow功能展示图片了。
但是对于arm开发板移植,在电脑上通过petalinux安装qt5后,他出现在的位置时导出sdk的路径,也就是构建的根文件系统sysroot路径下。这时如果在交叉编译工具链里交叉编译opencv,cmake时只是添加-D WITH_QT=ON的话会报错,说qt找不到(find package失败),直接导致highgui模块的qt命令”QT5_ADD_RESOURCES“失效:
我明明在交叉编译的时候已经指定了-D CMAKE_SYSROOT=/opt/petalinux/2023.1/sysroots/cortexa72-cortexa53-xilinx-linux,怎么还是说找不到呢?
网上所有的解决方法基本都是说直接在cmakelist里添加set(Qt5_DIR),但是没有任何作用,无论指定什么都找不到qt5。更有甚者说QT5_ADD_RESOURCES改成小写,更是荒唐可笑,怎么可能是这个原因呢
最后解决还是看了报错内容,是说缺少OE_QMAKE_PATH_EXTERNAL_HOST_BINS,也就是qt现在不在电脑的系统库里,是在sdk的sysroot里,属于”外部主机路径“,使用以下命令:
which qmake

就可以看到qmake的位置并不是/opt/petalinux/2023.1/sysroots/cortexa72-cortexa53-xilinx-linux,而是在/opt/petalinux/2023.1/sysroots/x86_64-petalinux-linux。所以找不到。这是因为x86_64-petalinux-linux表示是电脑主机文件夹,cortexa72-cortexa53-xilinx-linux是目标设备文件夹,qt的so库文件都在cortexa72-cortexa53-xilinx-linux里,但是编译用到的qmake却在主机路径里。
之后需要编译的时候加上qmake的“主机工作路径”:-D OE_QMAKE_PATH_EXTERNAL_HOST_BINS=/opt/petalinux/2023.1/sysroots/x86_64-petalinux-linux/usr/bin 即可解决问题,成功交叉编译。

2045

被折叠的 条评论
为什么被折叠?



