前言
本人在很多方面都是新手,莽撞地直接在linux做人脸识别。遇到了第一个错误,卡了挺久。前来发第一篇文章做个记录。
问题

[ 28%] Linking CXX shared library ../../lib/libopencv_imgcodecs.so /usr/local/lib/libjpeg.so: error adding symbols: File in wrong format
collect2: error: ld returned 1 exit status
modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/build.make:587: recipe for target 'lib/libopencv_imgcodecs.so.3.4.1' failed
make[2]: *** [lib/libopencv_imgcodecs.so.3.4.1] Error 1
CMakeFiles/Makefile2:4342: recipe for target 'modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/all' failed
make[1]: *** [modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/all] Error 2
Makefile:162: recipe for target 'all' failed
make: *** [all] Error 2
下面直接说问题:我请教过别人,回复说这是一个很常见的问题。所以回到报错原因这里:/usr/local/lib/libjpeg.so: error adding symbols: File in wrong format
动态库的格式不对。
查看文件类型:$ file FILE

bikecoz@ubuntu:/mnt/hgfs/gec/lib$ ls
libjpeg.a libjpeg.so libjpeg.so.9.3.0 python3.6
libjpeg.la libjpeg.so.9 python2.7 tencent-qq
bikecoz@ubuntu:/mnt/hgfs/gec/lib$ file libjpeg.so.9.3.0
libjpeg.so.9.3.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, with debug_info, not stripped
可以看到这是ARM平台的动态库,而编译opencv时选择了x86,所以链接失败,编译出错。
根本原因:我以前曾经编译过JPEG库,动态库格式是ARM的。我看网上很多人都不是碰到这个问题,所以一时没有反应过来。
解决
- 删除以前安装的JPEG库,编译时一般默认是
/usr/local - 重新编译JPEG库,不要指定–host
- 回到编译opencv的build路径,$
make

Scanning dependencies of target example_opengl_opengl_interop
[100%] Building CXX object samples/opengl/CMakeFiles/example_opengl_opengl_interop.dir/opengl_interop.cpp.o
[100%] Linking CXX executable ../../bin/example_opengl_opengl_interop
[100%] Built target example_opengl_opengl_interop
opencv make完成。
博主在尝试在Linux上进行人脸识别时遇到编译OpenCV的问题,错误提示动态库libjpeg.so文件格式不正确。原因是之前编译的JPEG库为ARM平台,而当前编译环境为x86。解决方案是删除旧的JPEG库,重新编译为正确平台的库,然后继续编译OpenCV,最终成功完成编译。
1497

被折叠的 条评论
为什么被折叠?



