如何修改librtmp Makefile以删除版本后缀?

时间:2014-04-18 13:42:22

标签: makefile shared-libraries

默认情况下,librtmp compile会生成librtmp.so.1文件和符号链接librtmp.so。我需要librtmp.so而不带数字后缀,因为andorid不支持它。

我能够修改Makefile以获取librtmp.so文件:

#SO_VERSION=1
#SO_posix=.${SOX}.${SO_VERSION}
SO_posix=${SOX}

所以文件生成的文件现在是librtmp.so

但是Android无法加载它,因为它仍然尝试加载librtmp.so.(带点):

Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1891]:   170 could not load needed library 'librtmp.so.' for 'libffmpeg.so' (load_library[1093]: Library 'librtmp.so.' not found)

1 个答案:

答案 0 :(得分:2)

如果共享库的DT_SONAME动态标记为foobar.so.56,则无论您使用实际文件(例如foo.solibbar.so)调用什么,要链接可执行文件的库,SONAME会记录在可执行文件中(作为DT_NEEDED动态标记),而不是实际的文件名。

以下是librtmp.so DT_SONAME librtmp.so. readelf -d librtmp.so | grep SONAME 。您可以通过以下方式确认:

SONAME

那么你需要做些什么才能摆脱-Wl,--soname=...?摆脱Makefile中某处的SONAME

  

如果可执行文件使用SONAME或文件名

,我该如何检查它?

可执行文件将始终使用DT_NEEDED(如果存在)。您可以通过在可执行文件的动态部分中查找readelf -d a.out | grep NEEDED 标记来检查可执行文件所需的库:

{{1}}