尝试在64位CentOS计算机上编译ffmpeg时出现此错误。
以下是我的./configure选项:
./configure --enable-shared --enable-gpl --enable-nonfree --enable-postproc --enable-swscale --enable-pthreads --enable-libx264 --enable-libxvid --enable-libvorbis --enable-libfaac --enable-libmp3lame --enable-libvpx
make
编译源代码时出现以下错误:
/usr/bin/ld: /usr/local/lib/libvpx.a(vpx_codec.c.o): relocation R_X86_64_32 against .rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libvpx.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [libavcodec/libavcodec.so.54] Error 1
如何解决此错误,并使用我的64位CentOS盒上的最新ffmpeg启动并运行libvpx?
答案 0 :(得分:10)
由于您使用“--enable-shared”配置了FFMPEG,您还需要使用“--enable-shared”配置其中一些其他库,并且它们都必须使用相同的设置。
此错误消息基本上告诉您再次编译libvpx并在configure命令中添加“--enable-shared”,然后再次尝试编译FFMPEG(也配置为“--enable-shared”)。有可能你会得到相同的错误,但它会说“libx264”或“libmp3lame”而不是“libvpx”,所以你还需要在configure命令中用“--enable-shared”重新编译那些lib。 / p>
答案 1 :(得分:3)
在运行Oracle Linux 6.3的x86_64计算机上编译 ffmpeg 时出现类似错误。 Oracle Linux基于Red Hat,因此在原始问题中类似于CentOS。
配置:
./configure --enable-shared --enable-nonfree --enable-libmp3lame --enable-libfaac --enable-libx264 --enable-encoder=x264 --enable-gpl
请:
/usr/bin/ld: /usr/local/lib/libx264.a(common.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libx264.a: could not read symbols: Bad value
在我的情况下,这个answer虽然部分是针对Ubuntu的,但却更多地阐明了x86_64系统的基本问题:
“我相信如果您在FFmpeg上启用共享,您必须执行相同操作 在x86_64系统上使用x264,否则你将拥有一个PIC共享FFmpeg和 非PIC静态x264。“
修复是为了确保我最初使用“--enable-static”标志编译的x264源代码 configure (生成“/usr/local/lib/libx264.a”)使用“--enable-shared”标志重新编译,该标志生成“/usr/local/lib/libx264.so”的正确目标:
1st Attempt:
1. cd /tmp
2. wget ftp://ftp.videolan.org/pub/x264/snapshots/last_x264.tar.bz2
3. tar xfv last_x264.tar.bz2;
4. cd x264-snapshot-xxxxxx
5. ./configure --enable-static
6. make && make install
2nd Attempt:
1. cd /tmp/x264-snapshot-xxxxxx
2. make distclean
3. ./configure --enable-shared
4. make && make install
答案 2 :(得分:2)
尝试
CFLAGS=-fPIC ./configure ...<your config options>...
添加错误提及的标记缺失。
答案 3 :(得分:0)
(问题是......?)
共享库必须由PIC目标代码组成,但ffmpeg无法这样做。
答案 4 :(得分:0)
您是否使用--shared
和-fPIC
编译了libvpx,以便生成libvpx.so*
?
如果没有,您可以在this问题中尝试评论#6和#7。
答案 5 :(得分:0)
我在使用libx264.a
的MythTV构建中遇到了这个问题我按照Saheed的建议下载并构建了。
唯一的一点就是当我执行“make install”时/usr/local/lib/libx264.a没有被更改。我不得不做“make install-lib-static”