交叉编译到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
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