我正在尝试构建一个静态链接到ffmpeg的JNI共享库。
但是在链接阶段,gcc失败了,错误如下:
/usr/bin/ld: ./lib_lin64/libswscale.a(swscale.o): relocation R_X86_64_PC32 against symbol `ff_M24A' can not be used when making a shared object; recompile with -fPIC
我正在使用以下命令编译我的jni库:
gcc -I $JAVA_HOME/include -I $JAVA_HOME/include/linux -I ./include -fPIC -c *.c
gcc -shared -Wl,--no-undefined -o libnv_avc_dec.so *.o -Wl,-Bstatic -L./lib_lin64 -lavcodec -lavutil -lswresample -lswscale -Wl,-Bdynamic -lm
而且我只使用h264解码特性,所以我也是从源码中用最少的所需特性集构建ffmpeg。我使用的./configure命令是:
./configure \ --enable-pic --prefix=ffmpeg-dist \ --disable-debug --enable-version3 --enable-gpl \ --disable-everything --enable-hwaccel=h264_vdpau --enable-hwaccel=h264_vaapi --enable-hwaccel=h264_qsv --enable-hwaccel=h264_mmal \ --enable-decoder=h264 --enable-decoder=h264_vdpau --enable-decoder=h264_crystalhd --enable-decoder=h264_mmal --enable-decoder=h264_qsv \ --disable-iconv --disable-securetransport --disable-xlib --disable-zlib --disable-lzma --disable-bzlib --disable-doc --disable-programs --disable-avformat --disable-avfilter --disable-postproc
因此,据我所知,链接器告诉我应该使用-fPIC标志来编译ffmpeg,以便创建一个共享库。但我相信我已经通过指定--enable-pic配置标志做到了这一点。我被困在这里是因为我不太熟悉autotools,也不是特别熟悉ffmpeg构建过程。
如果这是没有使用-fPIC标志编译ffmpeg .a库的问题,我如何强制它?如果不是这样,我做错了什么?我如何修复这个错误?
环境详情: Ubuntu 14.04.3 64-bit in Virtualbox,gcc 4.8.5和5.3 (结果相同),ffmpeg v.2.8.5
发布于 2021-07-15 21:24:30
如果你正在构建一个共享库,但是需要链接静态的ffmpeg库,添加链接器标志:
-Wl,-Bsymbolic使用cmake时:
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-Bsymbolic")https://stackoverflow.com/questions/34936080
复制相似问题