arm-linux-gnueabihf编译器在ubuntu环境下交叉编译opencv2.4.10

11 篇文章 0 订阅
5 篇文章 0 订阅

这两天因为要在arm板子上跑基于opencv的程序,故对opencv2.4.10在ubuntu环境下用arm-linux-gnueabihf进行了编译。中间遇到了很多问题,现在把整个经过记录下来,以供大家参考。

opencv版本: opencv2.4.10

交叉编译器: arm-linux-gnueabihf

环境变量配置: 在当前用户命令下,配置cmake和arm-linux-gnueabihf的环境变量。 

用vi .bashrc打开用户环境变量脚本,在最后行输入:

export PATH=$PATH:/home/username/linaro-multilib-2014.06-gcc4.9/bin
export PATH=/home/username/cmake-2.8.4-Linux-i386/bin:$PATH

编译opencv包括四个部分:

1. 编译jpeg库

    cd /home/.../jpeg-8d     这里用的是jpeg-8d版本,从官网上下载压缩包,直接解压缩在home路径下,并且进入当前目录。

   ./configure CC=arm-linux-gnueabihf-gcc --host=arm-linux-gnueabihf --prefix=/home/wangxiaoming/libopencv_arm/libjpeg-8d --enable-shared --enable-static

    jpeg库目录下有configure文件,故可以直接用上面的命令进行编译。

    说明:  CC=arm-linux-gnueabihf-gcc, 指的是所用的编译器类型,gcc指的是用来编译.C文件; --host=arm-linux-gnueabihf 指的是所用的编译器名称。--prefix指的是编译 

    出来 的文件存放的目录。--enable-shared --enable-static, 分别指的是动态编译和静态编译。

    最后执行make, make install命令。 

2. 编译zlib 库

    在home下解压缩库文件,参照下图修改Makefile文件。注意,在Makefile里要添加上添加编译选项:

    CFLAGS+=-fPIC。否则,后期编译opencv时会出现错误:

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

/home/wangxiaoming/linaro-multilib-2014.06-gcc4.9/bin/../lib/gcc/arm-linux-gnueabihf/4.9.1/../../../../arm-linux-gnueabihf/bin/ld:../../3rdparty/lib/libzlib.a(gzlib.c.obj):relocationR_ARM_THM_MOVW_ABS_NC against `a local symbol' can not be used when making ashared object; recompile with -fPIC

../../3rdparty/lib/libzlib.a: error addingsymbols: Bad value

collect2: error: ld returned 1 exit status

make[2]: *** [lib/libopencv_core.so] Error1

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

make: *** [all] Error 2

   

3. 编译opencv2.4.10时,先用cmake-gui版本进行编译。

    执行./cmake-gui命令:@ubuntu:~/cmake-2.8.4-Linux-i386/bin$ ./cmake-gui  会出现cmake的图形界面。

    


     点击configure, 选择Specify options for cross-compiling选项。接下来继续配置如下,记得用“Linux”,其它的如下配置:

     

         再下来,选择编译选项,注意去掉 WITH_TBB,WITH_GTK等选项(具体可查看其它),ARM不支持。

         另外注意更改编译安装路径:CMAKE_INSTALL_PREFIX 的路径 /usr/local  为  /home/.../libopencv 自定义的路径下。

         然后configure,  再Generate.  

        4. 安装opencv2.4.10

         在交叉编译的路径下,即在libopencv目录下,执行make命令 (cmake编译生成的makefile文件在这里)。

         

  在此时,先把编译好的第三方库zlib和jpeg的头文件和库文件复制到 opencv安装的路径下的include和lib文件下,再 执行make命令,成功编译后。在执行make install命令,     中间遇到了错误:

  CMake Error at modules/core/cmake_install.cmake:48 (FILE):
  file INSTALL cannot find
  "/home/../libopencv_arm/libopencv/lib/libopencv_core.so.2.4.10".
  Call Stack (most recent call first):
  modules/cmake_install.cmake:62 (INCLUDE)
  cmake_install.cmake:75 (INCLUDE)

  解决这个问题,需要在libopencv文件夹下的cmake_install.cmake文件里修改CMAKE_INSTALL_PREFIX,在之前的安装路径/home/username/libopencv_arm/libopencv/修     改为/home/username/libopencv_arm/libopencv/temp. 

  然后在/home/username/libopencv_arm/libopencv路径下执行make install命令,在temp文件夹下生成include, lib和share文件。

  可以把../libopencv/include和../libopencv/lib和../libopencv/temp/include和../libopencv/temp/lib文件合在一起。

  到此,opencv2.4.10的交叉编译完成了。

  

   环境配置:命令vim .bashrc,在文件最后一行输入:

   PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/wng/libopencv_arm/libopencv/lib/pkgconfig

exportPKG_CONFIG_PATH

  5. 编译测试
   假如已经有一个hello.cpp函数文件了,进入其所在目录,执行下列命令进行编译:
   arm-linux-gnueabihf-g++ hello.cpp -o hello  -lpthread -lrt `pkg-config --libs --cflags opencv`
   其中arm-linux-gnueabihf-g++是编译用的编译器,hello.cpp是要编译的程序;hello为编译后生成的可执行二进制程序,可以任意命名。  

   到此,opencv交叉编译已全部完成。

   知识在于分享与交流。若有问题,欢迎大家留言!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值