电脑疯子技术论坛|电脑极客社区

 找回密码
 注册

QQ登录

只需一步,快速开始

[linux教程] CentOS 7.1 编译opencv3.1+ffmpeg

[复制链接]
zhaorong 发表于 2017-3-14 14:50:07 | 显示全部楼层 |阅读模式

项目需要在服务器上带ffmpeg编译opencv 3.1,之前只在windows上用过opencv,编译

过一次痛苦的很,所以这次做好了充分心理准备。



编译ffmpeg

1.首先去下载源码,放在/ffmpeg目录下

2.修改config,因为没sudo权限,所以默认安装路径要改,编译opencv要调用动态库,所以要加shared项(很坑啊第一次没加重新编的)

.
  1. /configure --enable-shared --prefix=./install
复制代码


3.make
然后又出错,shared的锅


  1. /usr/bin/ld: libavcodec/mqc.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
  2. libavcodec/mqc.o: error adding symbols: Bad value
  3. collect2: error: ld returned 1 exit status
复制代码


解决方法是

config.mak L75加入 -fPIC,重新编译
HOSTCFLAGS=-O3 -g -std=c99 -Wall -fPIC (顺序可能不一样)


这次通过,然后
make install
完成。


编译opencv

1.下源码

2.cd ./opencv/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=./install ..
会显示配置选项,ffmpeg一般默认是yes
3.make
出错


  1. /usr/local/lib/libavcodec.a(avpacket.o):
  2. > relocation R_X86_64_32 against
  3. > `.rodata.str1.1' can not be used when
  4. > making a shared object; recompile with
  5. > -fPIC /usr/local/lib/libavcodec.a: could not read symbols: Bad value
复制代码


神坑啊,据说是opencv的bug,出在libavcodec.a连接动态库的过程,在这给出3个解决方法(你就知道我在这卡了多久):

(1)如上所述,编译ffmpeg的时候加shared选项
(2)设置CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC",然而我试的时候并不好使
(3)把libavformat.a libavutil.a libavcodec.a libswscale.a从/usr/local/lib(就ffmpeg的库目录)删掉,编译完opencv再放回去
最后解决我问题的是(1)(3)
然后make&&make install
完成

只写了关键的步骤详细过程可参考
http://blog.csdn.net/jinatom/article/details/7982612


您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|VIP|电脑疯子技术论坛 ( Computer madman team )

GMT+8, 2025-3-14 03:54

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表