项目需要在服务器上带ffmpeg编译opencv 3.1,之前只在windows上用过opencv,编译
过一次痛苦的很,所以这次做好了充分心理准备。
编译ffmpeg
1.首先去下载源码,放在/ffmpeg目录下
2.修改config,因为没sudo权限,所以默认安装路径要改,编译opencv要调用动态库,所以要加shared项(很坑啊第一次没加重新编的)
.
- /configure --enable-shared --prefix=./install
复制代码
3.make
然后又出错,shared的锅
- /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
- libavcodec/mqc.o: error adding symbols: Bad value
- 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
出错
神坑啊,据说是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