android - 为什么它会提示找不到一个库,即使我已经包含了它?

标签 android gcc shared-libraries

这是一个与视频处理相关的Android应用程序。 使用的库是 ffmpeg + x264,并基于 ffmpeg_vitamio 的工作进行松散编译

ffmpeg编译良好,按照如下方式创建libffmpeg.so:

$CC -lx264 -lm -lz -shared --sysroot=$SYSROOT -Wl,--no-undefined -Wl,-z,noexecstack $EXTRA_LDFLAGS libavutil/*.o libavutil/arm/*.o libavcodec/*.o libavcodec/arm/*.o libavformat/*.o libswresample/*.o libswresample/arm/*.o libswscale/*.o -o $PREFIX/libffmpeg.so

这里要包含的libx264是一个共享库,由libx264.so.130重命名

然后我将 libffmpeg.so 放入我的 Android 项目中。 编译没问题。但运行时出现错误:

05-21 13:17:45.066: E/AndroidRuntime(3973): FATAL EXCEPTION: main
05-21 13:17:45.066: E/AndroidRuntime(3973): java.lang.UnsatisfiedLinkError: Cannot load library: soinfo_link_image(linker.cpp:1635): could not load library "libx264.so.130" needed by "libffmpeg.so"; caused by load_library(linker.cpp:745): library "libx264.so.130" not found

我想在创建libffmpeg.so时,我使用了-lx264 我认为所有链接库都会包含在最终的输出库中。

但无论如何,让我尝试找出解决方案。 我将libx264.so或libx264.so.130放在几个目录中,例如/jni,/libs,/obj等。

或者我也尝试在jni的Android.mk中添加-lx264。

但是存在同样的错误。

所以我的问题是: (1)gcc创建共享库时,输出的.so库是否包含链接的共享库,这里是libx264.so?

(2)我的上述项目有什么问题?

最佳答案

  1. 当 GCC 创建共享库时,output.so 将不包含链接库,这种情况仅发生在静态库中,尽管 output.so 将有一个动态部分,说明它需要什么所有库正确链接。如果您运行

    readelf -d libffmpeg.so

    它将显示它需要的所有库。现在链接器尝试链接并加载所有需要的库。在您的情况下,它找不到 libx264.so.130,因为它不包含在您的项目中。

  2. 我还没有尝试过你正在做的事情,但是将库复制到 jni 或 lib 文件夹不会有帮助,我相信,你必须将它作为 PREBUILT_SHARED_LIBRARY 包含在你的 make 文件中。我认为这个链接可能可以解决您的问题。 How can i link prebuilt shared Library to Android NDK project?

关于android - 为什么它会提示找不到一个库,即使我已经包含了它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16685403/

相关文章:

android - 同时使用 ACRA 错误报告和 Google 的开发控制台?

android - 使用动画时 Trespass ViewGroup 的 Limits

Android 如何获取联系人照片的图像路径?

c++ - ArrayList C++问题

c - C中文件操作中的段错误

objective-c - 我如何检查 Xcode 4 中的程序集?

android - 从 ADB 和 Android SDK 获取 Android 设备标识符

linux - 为什么同一个可执行文件对不同的库查找使用不同的 RUNPATH?

android - native 库可以作为依赖项包含在 Android Studio 项目中吗?

visual-studio-2010 - OpenCV是否将部分项目部署为静态或动态库或其他?