Opencv的交叉编译错误的修改

本文档详细介绍了在Ubuntu环境下使用CMake进行OpenCV交叉编译的过程,包括配置环境、解决常见错误等,并提供了具体的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一次写博客,别喷。

环境:

Ubuntu11.10  +  TQ的交叉编译链4.46 +  cmake-2.8.12.2-Linux-i386 + OpenCV-2.4.1


配置的我就说了,网上有很多,自己去找。主要说一些错误的解决的办法。


例如:我在  /usr/local/Opencv-2.4.1放Opencv源码,另外在 /usr/local下新建Opencv-arm目录存放交叉编译后的库

配置好后,执行cmake-gui,在弹出的窗口中的"Where is the source code"选择Opencv源码目录Opencv-2.4.1;在"Where to build the binarices"选择存放交叉编译的目录Opencv-arm,点击左下角的configure,弹出一个窗口,

框条选择“Unix  Makefiles”,下面的选择最后一个;然后点击finish;然后弹出新窗口,“Operating System”填写arm-linux,“Version”填写Opencv版本(2.4.1);“C”选择交叉编译链(/opt/EmbedSky/4.4.6/bin/arm-linux-gcc);“C++”选择交叉编译链(/opt/EmbedSky/4.4.6/bin/arm-linux-g++);“Target  Root”选择交叉编译链的目录(/opt/EmbedSky/4.4.6/);然后点击Finished;(重点来了)弹出的红框中去掉BUILD_OPENER、BUILD_TIFF、BUILD_ZLIB、WITH_OPENER、WITH_TIFF其他的默认就行,点击Generate,OK!若重新cmake-gui最好在弹出的框中选择File-->Delete Cache,然后重新配置。基本可以省去几个错误!!!

配置完,进入交叉编译库存放的目录(Opencv-arm)进行make,然后报错了(不一定都有)~~~

错误分析:

1,XML::Parser perl module is required for intltool错误
      解决:cpan install XML::Parser



2,Linking CXX shared library ../../lib/libopencv_core.so

       ..................................................................

       ..................................................................

       'a local symbol' can not be used when making a shared object;recompile with  -fPIC

       ................................................:could not read symbols :Bad value

       collect2 :ld returned 1 exit status

       make[2]:***[lib/libopencv_core.so]错误1

       make[1]:***[modules/core/CMakeFiles/opencv_core.dir/all]错误2

       .....................................

版本问题(64Ubuntu

解决:

     进入opencv目录下的3rdparty的对应目录CMakeFiles/ *.dir下(所有的),打开flags.make,在C_FLAGS = 后添加-O3 -fPIC,用来支持在64位机上编译

../3rdparty/zlib/CMakeFiles/zlib.dir/flags.make

修改C_FLAGS =  -W -Wall 为 C_FLAGS =  -O3 -fPIC  -W -Wall

修改CXX_FLAGS =  -W -Wall 为 C_FLAGS =  -O3 -fPIC  -W -Wall


3,

collect2:ld returned 1 exit status

make[2]:***[lib/libopencv_highgui.so]错误1

make[1]:***[modules/highgui/CMakeFile/opencv_highgui.dir/all]错误2

..........................................

解决:

cmake-gui的界面中把以下选项去掉

BUILD_OPENER、BUILD_TIFF


4,

Linking CXX executable ../../bin/opencv_test_calib3d
../../lib/libopencv_core.so: undefined reference to `pthread_key_create'
../../lib/libopencv_core.so: undefined reference to `pthread_getspecific'
../../lib/libopencv_ts.so: undefined reference to `pthread_key_delete'
../../lib/libopencv_core.so: undefined reference to `pthread_once'
../../lib/libopencv_core.so: undefined reference to `clock_gettime'
../../lib/libopencv_core.so: undefined reference to `pthread_setspecific'
collect2: ld returned 1 exit status
make[2]: *** [bin/opencv_test_calib3d] Error 1
make[1]: *** [modules/calib3d/CMakeFiles/opencv_test_calib3d.dir/all] Error 2
make: *** [all] Error 2

解决( ld returned 1 exit status都可以):

修改目录下的CMakeCache.txtCMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt




### Linux环境下OpenCV交叉编译教程 #### 准备工作 为了成功完成OpenCV交叉编译,需先准备好必要的环境和工具链。这包括但不限于安装最新的CMake版本以及获取适合目标平台架构(如ARM)的交叉编译工具链[^5]。 #### 修改Toolchain文件 针对特定硬件平台的优化和支持,可能需要调整`opencv/platforms/linux/`目录下的toolchain配置文件。对于某些情况而言,可以删除原有内容,并按照需求重新定义新的设置来适应具体的开发场景[^4]。 #### 使用CMake-GUI进行配置 启动CMake GUI界面后,在指定源码位置与构建输出路径的同时,还需特别注意选择正确的编译器路径及名称;例如当遇到无法显示V4L选项的问题时,可以通过将操作系统名改为大写的Linux使得这些选项可见[^3]。 #### 编译过程中的注意事项 执行实际编译命令之前,请确认已经正确设置了环境变量指向新创建或已有的库文件夹,并且通过`pkg-config --cflags --libs opencv4`验证链接参数无误。此外,考虑到不同版本间可能存在兼容性差异,建议参照官方文档或其他可靠资源逐步操作以减少潜在错误的发生概率[^1]。 ```bash export LD_LIBRARY_PATH=/path/to/arm-install/lib:$LD_LIBRARY_PATH sudo ldconfig ``` #### 验证编译成果 最后一步是对生成的目标二进制文件进行功能测试,确保其能够在预期环境中正常运行。编写简单的应用程序作为示例可以帮助快速检验整个流程是否顺利完成[^2]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值