Opencv-2.1.0 的arm移植我的环境Host:Ubuntu 14.04Target:tq2410 with Linux 2.6.30.4Crossing Compiler:arm-linux-gcc 4.3.2一交叉编译链的安装1# cd /usr/local解压,即可得到arm-none-linux-gnueabi 目录# tar xzvf arm-none-linux-gnueabi-4.3.2.tgz -C ./2 编辑/etc/bash.bashrc文件添加把编译器路径到环境变量PA TH中,只要在这个文件中添加下面这2 个语句即可:PATH=/usr/local/arm/4.3.2/bin:$PA THexport PA TH3 编辑完毕后使用source /etc/bash.bashrc 命令执行以下这个文件,让设置生效,之后再输入:# arm-none-linux-gnueabi-gcc -v如果输出下面的信息则表面设置成功:Using built-in specs.Target: arm-none-linux-gnueabiConfigured with:/scratch/julian/lite-respin/linux/src/gcc-4.3/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --enable-shared --enable-symvers=gnu--enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2008q3-72' --with-bugurl=https:///GNUToolchain/--disable-nls--prefix=/opt/codesourcery--with-sysroot=/opt/codesourcery/arm-none-linux-gnu eabi/libc--with-build-sysroot=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/libc--with-gmp=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnueabi-i686-p c-linux-gnu/usr--with-mpfr=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-non e-linux-gnueabi-i686-pc-linux-gnu/usr--disable-libgomp--enable-poison-system-directories--with-build-time-tools=/scratch/julian/lit e-respin/linux/install/arm-none-linux-gnueabi/ bin --with-build-time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/bin Thread model: posixgcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)但是,此时会报错:bash:/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc:没有那个文件或目录这是因为是为62位机与32位不兼容,在64位ubuntu系统上运行32位程序需要安装32位lib网上很多地方说用#sudo apt-get install ia32-libs可解决,但是我执行之后却显示:# sudo apt-get install ia32-libs正在读取软件包列表... 完成正在分析软件包的依赖关系树正在读取状态信息... 完成正在读取软件包列表... 完成正在分析软件包的依赖关系树正在读取状态信息... 完成现在没有可用的软件包ia32-libs,但是它被其它的软件包引用了。
这可能意味着这个缺失的软件包可能已被废弃,或者只能在其他发布源中找到可是下列软件包取代了它:lib32z1 lib32ncurses5 lib32bz2-1.0E: 软件包ia32-libs 没有可供安装的候选者运行以下命令即可:#sudo apt-get install g++-multilib这时即可显示上面的信息,交叉编译链安装完成二OpenCV2.0.0交叉编译过程ps:到这一步后网上很多教程都是开始交叉编译x264,xvid,ffmpeg等等,作者尝试过未果。
所以转而投降cmake-gui,最后顺利编译成功。
强烈推荐cmake-gui,简单实用。
1.安装cmake-gui #sudo apt-get install cmake-qt-gui2.在usr/local新建文件夹# mkdir opencv把下载的OpenCV-2.0.0.tar.bz2解压到usr/local/opencv 目录下3、然后在usr/local/opencv 新建一个opencv-arm 文件夹,作为CMake编译arm版本的工作目录# mkdir opencv-arm如下图所示:3、在终端里调出CMake gui界面:# cmake-gui按照下图方式选择源码目录和build目录然后点击Configure按钮,保持generator为Unix Makefiles,选择Specify options for cross-compiling,点击Next按照如下方式配置:注:/usr/local/arm/4.3.2 为交叉编译工具arm-linux-g++/gcc 的所在包含文件夹(在bin 文件夹里面)注:Target System选项里Operation我认为是arm板子上的操作系统,对应我的Version为2.6.30.4,上图中没有更改然后点击“Finish” 按钮;然后点击Generate按钮生成Makefile;4.在/usr/local/opencv/opencv-arm目录下$sudo make(1)83%报错:Linking CXX executable ../../bin/opencv_createsamples../../lib/libopencv_core.so: undefined reference to `clock_gettime'../../lib/libopencv_highgui.so: undefined reference to `_TIFFerrorHandler'../../lib/libopencv_highgui.so: undefined reference to `_TIFFrealloc'../../lib/libopencv_core.so: undefined reference to `pthread_key_create解决方法:修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt,重新编译(3)又报错:Linking CXX executable ../../bin/opencv_createsamples此时又出错:../../lib/libopencv_highgui.so: undefined reference to `_TIFFerrorHandler'../../lib/libopencv_highgui.so: undefined reference to `_TIFFrealloc'../../lib/libopencv_highgui.so: undefined reference to `_TIFFmalloc'../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemcpy'../../lib/libopencv_highgui.so: undefined reference to `TIFFOpen'../../lib/libopencv_highgui.so: undefined reference to `_TIFFfree'../../lib/libopencv_highgui.so: undefined reference to `_TIFFwarningHandler'../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemcmp'../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemset' 解决方法:修改CMakeCache.txt,WITH_TIFF:BOOL=ON,改成OFF(不再对TIFF图像格式支持。
重新编译,成功5、然后运行make install,将opencv生成的库和头文件(在/usr/local/opencv/opencv-arm/lib下)安装到目录/usr/local/arm/4.3.2/lib/opencv/,结果如下:6、把这5个.so 库文件拷贝到ARM板系统中的/lib 目录下面:(如下是添加之后的截图)7、下来就是编写验证程序了:首先得确保摄像头在ARM板上的使用是正常的,具体情况请查阅大神的博文:《摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用》参考文档:1.Opencv-2.0.0的ARM移植和使用(Ubuntu10.04 / OK6410开发板/ linux3.01)/index.php?c=article&a=read&id=473282. OpenCV移植到ARM 全过程/jemofh159/article/details/75537473.ARM编译OpenCV 2.X/link?url=DI0Ou_QHJC458rLttdZkpws83PTpuI5K10-0FCnF9E3_sfva6 CeM31_AgZsCHsFV2hIQFvP7bsvsdrEsiQWf6qAsJrFLtZ96DwhvkFp_QAS4.在64位ubuntu系统上运作32位程序需要安装32位lib/operating-system/1454963.html。