记录编译X86、ARM版(交叉编译)库函数踩坑日记

  • Post author:
  • Post category:其他


x86版(还算顺利)

1、 ubuntu上安装g++/gcc(一般也不用装)

2、 编译opencv4.5.5版库函数、配置环境变量。。。

3、 编译的时候才知道opencv4要加上C++11的标准 (-Wall -std=c++11)

4、 然后是遇到下面这个宏函数的问题

//#ifndef CV_RGB(r,g,b)

#define CV_RGB(r,g,b) cvScalar((b),(g),(r),0)

//#endif

5、 X86版库函数编译命令:

//动态库编译指令:
g++ -Wall -std=c++11 -shared -fpic abab.cpp -o libabab.so `pkg-config --cflags --libs opencv4`
//静态库编译指令:
g++ -Wall -std=c++11 -c  abab.cpp  `pkg-config --cflags --libs opencv4`
ar rcs libabab.a  abab.o

ARM版

1、 ubuntu上安装aarch64-linux-gnu(5.4.0)

其实到这里以为就直接换个编译工具就上了,结果一直报错找不到动态库,找过去看了看,这不是有吗,我日,难道是我没有配置环境变量,,搞了啊,又试了几次是不是指令不太对,换到不同的路径下去试,还是不行,最后才想起来,还要把opencv的库函数编译一份ARM版的。我是菜鸡

2、 不知道怎么编译ARM版opencv4.5.5库函数,捣鼓了半个多小时,才知道可以用Cmake来搞,试着整,整了一半,发现报错cmake版本太低,升级版本,升级完了不能用。卸了重装,用source源码装,编译安装用了大半个小时。终于运行起来了,按照顺序搞一遍,乱七八糟的报错,终于到了编译opencv的时候了,这个耗时有点久,不知道今天晚上能不能跑完

中间又遇到到些问题,

1、编译OpenCV4.5.5出现的错误:

../../lib/libopencv_world.so.4.5.3: undefined reference to `png_do_expand_palette_rgb8_neon'
../../lib/libopencv_world.so.4.5.3: undefined reference to `png_init_filter_functions_neon'
../../lib/libopencv_world.so.4.5.3: undefined reference to `png_do_expand_palette_rgba8_neon'
../../lib/libopencv_world.so.4.5.3: undefined reference to `png_riffle_palette_neon'
collect2: error: ld returned 1 exit status
apps/model-diagnostics/CMakeFiles/opencv_model_diagnostics.dir/build.make:95: recipe for target 'bin/opencv_model_diagnostics' failed
make[2]: *** [bin/opencv_model_diagnostics] Error 1
CMakeFiles/Makefile2:3183: recipe for target 'apps/model-diagnostics/CMakeFiles/opencv_model_diagnostics.dir/all' failed
make[1]: *** [apps/model-diagnostics/CMakeFiles/opencv_model_diagnostics.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....


对应的解决方案:打开opencv源码目录,编辑文件 vim 3rdparty/libpng/pngpriv.h

第130行注释掉, 修改为131行

/* #  if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \ */
# if defined(PNG_ARM_NEON) && (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \
   defined(PNG_ALIGNED_MEMORY_SUPPORTED)
#     define PNG_ARM_NEON_OPT 2
#  else
#     define PNG_ARM_NEON_OPT 0
#  endif
#endif

等等。。

还有好几个错误,忘了记录下来

编译好库函数,后面就差不多了



版权声明:本文为qq_45434544原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。