Ubuntu18.04编译opencv库make时出错 error adding symbols: File in wrong format

博主在尝试在Linux上进行人脸识别时遇到编译OpenCV的问题,错误提示动态库libjpeg.so文件格式不正确。原因是之前编译的JPEG库为ARM平台,而当前编译环境为x86。解决方案是删除旧的JPEG库,重新编译为正确平台的库,然后继续编译OpenCV,最终成功完成编译。

前言

本人在很多方面都是新手,莽撞地直接在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完成。

参考

编译过程我参考了:https://blog.csdn.net/qq_34347375/article/details/81137142?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161459352316780266223814%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161459352316780266223814&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-81137142.first_rank_v2_pc_rank_v29&utm_term=opencv+linux&spm=1018.2226.3001.4187

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值