如何构建没有版本后缀的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
有没有一种方法可以配置为 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