• 【Linux开发】OpenCV在ARM-linux上的移植过程遇到的问题2---CMAKE配置问题


    实际上这里说的是移植的第一步,下载到源码后,我用的是opencv2.4.9,解压缩,然后可以利用cmake-gui来进行configure配置,这里面需要设置交叉编译的工具链,具体的可以参考【Linux开发】OpenCV在ARM上的移植


    这里面的几个问题:

    没有路径的可以设置选择No,不要选他。

    除了前面列的那篇文中所提到的,要修改CMakeCache.txt中的那个CMAKE_EXE_LINKER_FLAGS=-lpthread -lrt,还有一个特别要命的问题就是:

    Linking CXX shared library ../../lib/libopencv_core.so
    /opt/EmbedSky/4.4.6/lib/gcc/arm-embedsky-linux-gnueabi/4.4.6/../../../../arm-embedsky-linux-gnueabi/bin/ld: ../../3rdparty/lib/libzlib.a(inflate.c.obj): relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC
    ../../3rdparty/lib/libzlib.a: 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
    make: *** [all] 错误 2

    解决方法:

    进入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
    

    好像得对应到每一个出错的路径下进行修改(多个都出现这种问题的话)。

    编译一个能在 arm 平台上用的动态库,结果报错如下:
    relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC
    ./obj/xxx.o: could not read symbols: Bad value
    collect2: error: ld returned 1 exit status
    
    其实错误信息已经给出解决办法了,加 -fPIC 参数从新编译(recompile with -fPIC)
    所以如果是命令行,直接添加 -fPIC
    如果是Makefile,添加编译选项:CFLAGS  +=  -fPIC
    Done !
    好像还是64bit操作系统的问题吧?

    ------------------

    2016-8-28 19:37

    张朋艺 pyZhangBIT2010@126.com




  • 相关阅读:
    vue-cli3初尝试之路径别名配置
    nodejs之koa-router与koa-body搭配使用
    nodejs之crypto加密算法
    nodejs之glob与globby
    vuecli3初尝试(转载)
    python之线程同步
    python之多线程通信
    python之通过thread来实现多进程
    U盘启动盘安装Mac OS
    Windows环境下制作MACOS X U盘安装盘
  • 原文地址:https://www.cnblogs.com/huty/p/8518224.html
Copyright © 2020-2023  润新知