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
等等。。
还有好几个错误,忘了记录下来
编译好库函数,后面就差不多了