我需要创建一个内部使用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;
看起来我缺少一些编译器/链接器设置。有人可以指点我正确的方向吗?问候。
答案 0 :(得分:3)
以下是我解决问题的方法。您需要在配置期间向ldflags添加“-Wl,-Bsymbolic”。此外,在创建共享库时,需要将相同的参数传递给链接器。问候。
答案 1 :(得分:0)
如果您需要共享库,请使用--enable-shared
构建ffmpeg,这将生成共享对象libswscale.so
,libavformat.so
等。.a
文件是默认构建的静态库组态。