上一篇文章写了ffmpeg工具(ffmpeg/ffplay/ffprobe/ffserver)以及静态库的编译与安装。但是按大多数教程上说的使能动态编译库则编译通不过,大多数错误形如:relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
错误提示其实很明确,主要是因为,我们在编译这些库(x264/x265/vpx等)的时候只开启的静态编译。因此希望编译ffmpeg动态库的时候,简单地加上--enable-shared肯定会报错的。
因此,我们需要修改的内容有:
1、重新编译libx264,配置方式基本跟前一编文章一样,但是在./configure 时加上--enable-shared。然后再make -j4 && sudo make install。
2、重新编译libvpx,配置时同样加上--enable-shared选项,make之前记得先make clean一下,否则可能提示编译失败。
3、重新编译libopus。
我们在上一篇文章中,配置选项用了--disable-shared,因此肯定是不行的。所以这里需要使用--enable-shared,--enable-static。编译前先make clean,再make -j4,sudo make install。
4、重新编译libmp3lame。同样的,在之前编译的时候使用了--disable-shared。因此修改如opus。./configure --enable-shared --enable-static --enable-nasm。编译安装。
5、重新编译libfdk-acc。之前的编译还是使用了--disable-shared。改为:./configure --enable-shared --enable-static。编译安装。
至此再重新编译ffmpeg就可以了。
./configure \ --pkg-config-flags="--static" \ --extra-libs="-lpthread -lm" \ --enable-gpl \ --enable-libass \ --enable-libfdk-aac \ --enable-libfreetype \ --enable-libmp3lame \ --enable-libopus \ --enable-libtheora \ --enable-libvorbis \ --enable-libvpx \ --enable-libx264 \ --enable-libx265 \ --enable-shared \ --enable-nonfree && \ make -j4 && \ sudo make install && \ hash -r
然而有点奇怪的是,我们之前在编译x265时使用了 -DENABLE_SHARED:bool=off,即没有开启x265的动态库编译,但是这里我没有重新编译x265,结果是可以通过的。如果大家遇到提示x265需要带-fPIC重新编译时,可以把它改成:-DENABLE_SHARED:bool=on再试试。
转载请注明:OpenMind » ffmpeg编译及安装(续)