我在sourceforge上使用项目FFmpeg4Android来构建FFmpeg .so共享库文件。但是,我在ADT Java应用程序中使用它们时遇到了问题。我创建了一个简单的JNI调用,试图调用av_register_all并且我得到库错误。
当我在Nexus 7上运行应用程序时,我被告知它无法加载库libavformat-HEAD-1.0.so
所以我试图通过System.loadLibrary方法加载它,我无法找到libavcodec-HEAD-1.0.so。以这种方式回过头来,我最终试图加载libavutil-HEAD-1.0.so,它产生了一个错误'找不到符号'__strchr_chk“'。
这是我的Java类:
public class LibavcodecTest {
public static native void avRegisterAll();
static {
System.loadLibrary("avutil-HEAD-1.0");
System.loadLibrary("avcodec-HEAD-1.0");
System.loadLibrary("avformat-HEAD-1.0");
System.loadLibrary("LibavcodecTest");
}
}
更新
我联系了维护ffmpeg4android的开发人员,他能够指导我将我正在构建的android源代码版本改为与我的设备相同,这样我的设备可以成功调用av_register_all。
然而,现在我收到一个叫做avformat_open_input的崩溃,我收到了“致命信号11(SIGSEGV)”。
我在网上的搜索让我相信这是一个内存访问问题。有没有人知道是否可以通过加载共享库来解决这个问题?
答案 0 :(得分:2)
让构建的共享库在我的设备上运行的关键是在与之兼容的旧NDK上构建源代码。我试图在最新的源代码上构建它,但是没有用。
Here is a link to the discussion I had with the developer who helped me solve it.