如何构建没有版本后缀的ffmpeg共享库

how to build ffmpeg shared libraries without version suffix

有没有一种方法可以配置为 android 构建没有版本号后缀的 ffmpeg 共享库?我能够使用不同的选项进行构建,但总是会得到像 "libavcodec.so.57" 这样的文件。我需要没有像 "libavcodec.so" 这样的后缀的库。我认为选项“--disable-symver”可以解决问题,但不幸的是它没有。问题是我有一个库(.so 文件)依赖于没有后缀的 ffmpeg 共享库,因此无法加载那些正在构建的库。 我主要遵循了说明 here.

提出问题总能找到答案。这就是我成功的原因,深入研究 make 文件很有帮助。执行以下操作:

  • 运行你的配置
  • 找到"config.mak"
  • 变化

    SLIBNAME_WITH_VERSION=$(SLIBNAME).$(LIBVERSION) SLIBNAME_WITH_MAJOR=$(SLIBNAME).$(LIBMAJOR)

    至:

    SLIBNAME_WITH_VERSION=$(SLIBNAME)
    SLIBNAME_WITH_MAJOR=$(SLIBNAME)

  • 变化

    SLIB_INSTALL_NAME=$(SLIBNAME_WITH_VERSION) SLIB_INSTALL_LINKS=$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)

    至:

    SLIB_INSTALL_NAME=$(SLIBNAME)
    SLIB_INSTALL_LINKS=

  • 运行 "make" 或 "make -j$(nproc)"

  • "make install"

现在您将拥有没有后缀的共享库。
您可以通过以下方式检查它们的依赖关系 "readelf -d somefile.so"

无需更改config.mak

只需添加--target-os=android即可配置调用

我的例子

NDK=${HOME}/android-sdk-linux/ndk-bundle
ABI=arm

./configure \
    --arch=$ABI \
    --target-os=android \
    --disable-everything \
    --disable-symver \
    --enable-runtime-cpudetect \
    --enable-pic \
    --enable-shared \
    --disable-static \
    --prefix=../build/$ABI \
    --cross-prefix=$NDK/toolchains/$ABI-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/$ABI-linux-androideabi- \
    --sysroot=$NDK/platforms/android-26/arch-$ABI \
    --extra-cflags="-march=armv7-a -mfloat-abi=softfp -fPIC -DANDROID" \
    --extra-ldflags="" \
    || exit 1

    make clean
    make -j4 || exit 1
    make install || exit 1