2017-06-05 139 views
0

我需要创建一个内部使用ffmpeg函数的自定义共享库。这个想法是创建一个胖共享库,比如myffmpeg.so。使用ffmpeg构建共享库会导致重定位错误

我第一次构建ffmpeg代码(3.3.1作为这篇文章)。在配置期间,我通过--extra-cflags--extra-cxxflags.指定-fPIC,我还在配置期间指定-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; 

看起来像我错过了一些编译器/连接设置。有人可以请指点我正确的方向吗?问候。

回答

0

如果需要共享库,建立与ffmpeg的--enable-shared,这将产生共享对象libswscale.solibavformat.so.a文件是默认配置内置静态库。

+0

谢谢你的帮助。我确实需要静态库,以便我可以创建一个fat .so文件而不是几个.so文件。 – Peter

0

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