当前位置: 首页 > 知识库问答 >
问题:

用Qt和opencv实现Raspberry Pi的交叉编译

史默
2023-03-14

交叉编译到Raspberry Pi的html" target="_blank">方法多种多样,也有交叉编译Qt或OpenCV的解决方案。

然而,我找不到任何解决方案来交叉编译一个与Qt也使用OpenCV的程序。

我指定了以前用于编译Qt的gnueabihf作为编译器:

我创建了~/opt/opencv_build_arm7/目录,并在其中尝试:

sudo cmake -DCMAKE_CXX_COMPILER=/home/<user>/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++ -DCMAKE_C_COMPILER=/home/<user>/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-gcc -DCMAKE_TOOLCHAIN_FILE=/usr/dev/opencv/platforms/linux/arm-gnueabi.toolchain.cmake /usr/dev/opencv/

(下载的opencv源代码位于/usr/dev/opencv/中,我最近使用Qt安装附带的G++编译器成功地为x64平台编译了opencv。)注意, 是当前会话的用户名,以防其他初学者将来尝试这些方法

运行构建命令:“/usr/bin/make”“cmtrycompileexec117178613/fast”

/usr/bin/make-f cmakefiles/cmtrycompileexec117178613.dir/build.make cmakefiles/cmtrycompileexec117178613.dir/build

Make1:进入目录“/home//temp/cmakefiles/cmaketmp”

/home//temp/cmakefiles/cmaketmp/testcxxcompiler.cxx:4:10:对不起,未实现:Thumb-1 hard-float VFP ABI

cmakefiles/cmtrycompileexec117178613.dir/build.make:57:recipe for target
'cmakefiles/cmtrycompileexec117178613.dir/testcxxcompiler.cxx.o'失败

Make1:***
[cmakefiles/cmtrycompileexec117178613.dir/testcxxcompiler.cxx.o]错误1

Makefile:118:目标“CmtryCompileExec117178613/Fast”的配方失败

make:***[CMTRYCompileExec117178613/FAST]错误2

我为编译器指定了一个绝对路径,但即使我没有指定它,只是将它添加到$path,它仍然有同样的问题。

export PATH=$PATH:/home/<user>/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/

sudo cmake -DCMAKE_TOOLCHAIN_FILE=/usr/dev/opencv/platforms/linux/arm-gnueabi.toolchain.cmake /usr/dev/opencv/
arm-linux-gnueabihf-g++ -v

共有1个答案

郭盛
2023-03-14

http://docs.opencv.org/doc/tutorials/introduction/crosscompilation/arm_crosscompile_with_cmake.html上的教程似乎要么是错误的,要么是过时的。

下载opencv 3.0的源代码时,opencv/platforms/linux/arm-gnueabi.toolchain.cmake似乎没有为Raspberry PI充分配置。

访问ARM-linux-gnueabihf工具链创建者的工作组页面,似乎要支持Raspberry Pi中的ARM7,必须将以下选项传递给编译器:-mcpu=cortex-a7-mfloat-abi=hard-mfpu=vfpv4

因此,我们必须编辑opencv/platforms/linux/arm-gnueabi.toolchain.cmake文件并更改

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mthumb -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi")
set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS} -mthumb -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mthumb -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=vfpv4")
set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS} -mthumb -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=vfpv4")

再次运行cmake,配置成功完成!

INCLUDEPATH += <your build dir>/install/include/opencv2/
INCLUDEPATH += <your build dir>/install/include/
LIBS += -L  "<your build dir>/install/lib/"
LIBS += -lopencv_calib3d
LIBS += -lopencv_core
#... and so on

对于一个快速而肮脏的测试,要查看是否一切正常,可以将库复制到部署可执行文件的同一个文件夹中,并通过使用

$ LD_LIBRARY_PATH=. ./your_program

Opencv现在应该工作在你的Qt程序上的覆盆子圆周率。

除非我的google-fu非常弱,否则这可能是第一个在Raspberry Pi上运行Qt GUI应用程序并使用opencv的文档案例。:)

(...如果我找到了在窗口中运行Qt应用程序并使用CVNamedWindow的好解决方案,将进行更新)

 类似资料:
  • 我做错了什么? 提前感谢,

  • 当使用和选项进行交叉编译时,针对与本机系统相同的体系结构和硬件,我注意到 似乎比本机构建的计数器部分生成更差的优化 请考虑以下简单的代码示例: 当使用在下进行优化时,本机 target代码生成生成: 使用

  • 问题内容: 各位 我正在尝试在Ant和终端上玩Javac Cross编译。在本地和集成环境中,我在一个非常基本的问题上遇到了同样的问题。 我在linux终端(以及在Windows和cmd的cygwin上)上运行此命令: 与Main.java一起使用,仅是System.out.println。 我收到错误消息: 我在本地Windows机器上的配置大致相同,结果完全相同。 我的理解是,交叉编译就是使用

  • 我试图交叉编译一个linux系统的简单hello world程序。 我有以下资料: null 我试图运行/lib/libc.so.0来获取版本信息,但出现了一个分段错误。它似乎用-static编译解决了这个问题。所以我想这是libc库的问题。谢谢你的帮助。

  • 我正在用SBT12.1构建一个scala项目。 实际的build.sbt可以在网上找到。

  • 问题内容: 我创建了一个交叉编译的arm可执行文件。我想找到可执行文件的库依赖项。我正在使用ubuntu natty并安装了不包含ldd的arm-linux- gnueabi工具链。有没有可用的工具来查看Linux中arm可执行文件库的依赖性。 问题答案: 这有点儿混乱,但这是我能找到的最好的解决方案,对于基本用途它确实很好用-只需使用其他交叉工具将此脚本另存为“ arm-none-linux-g