使用ffmpeg构建共享库会导致重定位错误

时间:2017-06-05 23:58:43

标签: ffmpeg

我需要创建一个内部使用ffmpeg函数的自定义共享库。我们的想法是创建一个胖共享库,比如myffmpeg.so。

我首先构建ffmpeg代码(截至本文的3.3.1)。在配置期间,我通过-fPIC--extra-cflags指定--extra-cxxflags.我在配置期间也指定了-enable-pic。运行configure和make后,会成功创建各种归档文件,例如libswscale.a, libavformat.a,等。

接下来,我尝试构建我的共享库:

gcc -fPIC -Ixxx  mywrapper.cpp 
gcc -shared -o myffmpeg.so mywrapper.o -Lxxx -lswscale -lavformat...

但是,这会导致错误:

Relocation R_X86_64_PC32 against symbol ff_M24A can not be
used when making a shared object; 

看起来我缺少一些编译器/链接器设置。有人可以指点我正确的方向吗?问候。

2 个答案:

答案 0 :(得分:3)

以下是我解决问题的方法。您需要在配置期间向ldflags添加“-Wl,-Bsymbolic”。此外,在创建共享库时,需要将相同的参数传递给链接器。问候。

答案 1 :(得分:0)

如果您需要共享库,请使用--enable-shared构建ffmpeg,这将生成共享对象libswscale.solibavformat.so等。.a文件是默认构建的静态库组态。