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

微信扫一扫 分享朋友圈

已有 1861 人浏览分享

CentOS 7.1 编译opencv3.1+ffmpeg

[复制链接]
1861 0

项目需要在服务器上带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



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

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.