- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试构建一个静态链接到 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 配置标志来做到这一点。而且我几乎被困在这里,因为我对自动工具不是很熟悉,特别是对 ffmpeg 构建过程也不是很熟悉。
如果这是 ffmpeg .a 库未使用 -fPIC 标志编译的问题,我该如何强制?如果不是这种情况,我做错了什么,我该如何解决这个错误?
环境详细信息:Virtualbox 中的 Ubuntu 14.04.3 64 位、gcc 4.8.5 和 5.3(都给出相同的结果)、ffmpeg v.2.8.5
最佳答案
如果您正在构建共享库但需要与静态 ffmpeg 库链接,请添加链接器标志:
-Wl,-Bsymbolic
使用 cmake 时:
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-Bsymbolic")
关于c - gcc "relocation R_X86_64_PC32 against symbol ` ff_M24A'"在 linux 上静态链接 ffmpeg 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34936080/
我是一名优秀的程序员,十分优秀!