gpt4 book ai didi

c - gcc "relocation R_X86_64_PC32 against symbol ` ff_M24A'"在 linux 上静态链接 ffmpeg 时出错

转载 作者:行者123 更新时间:2023-12-04 23:03:27 25 4
gpt4 key购买 nike

我正在尝试构建一个静态链接到 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 *.cgcc -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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com