我有一个Android项目,其中包括NDK代码。从这段代码中,我需要调用用NDK构建的其他库中的函数,这些库位于jniLibs文件夹中:
jniLibs/armeabi/libtess.so
jniLibs/armeabi-v7a/libtess.so
...
如果我尝试从java加载这些库,如System.loadLibrary("tess"),它工作得很好。然而,当我试图通过将此添加到build.gradle:
来链接我的NDK库时:ndk {
moduleName "myJNILib"
stl "stlport_shared"
ldLibs "log", "tess"
}
它找不到它。
当然,如果我不链接它,它不能编译myJNILib,因为它找不到符号。无论如何,使这项工作使用gradle?或者我真的需要在gradle之外构建我的库,如果我想链接到其他预构建的库?
我认为你想要做的是主要依靠自然的NDK构建…的东西……我不知道该用什么词来形容。
无论如何,你会想要遵循这个教程。它对我自己的东西很有效。你也很可能会想要阅读这篇Android的介绍。可文件。这对调试和确保正确链接非常有帮助。
这样做可能会遇到两个问题:
- 未定义的符号错误,这可能是绝对的痛苦。更有可能的是,您希望消除这种依赖。我在这个问题上花了几个小时,最后得出结论,文件一定不是在那里。在某种程度上。
- 您也可能会遇到它无法找到您正在处理的文件的扩展名(因此,它可能会说foo1。所以找不到图书馆了。#尽管你链接了foo2.so。如果发生这种情况,你可能不得不编译一个。a库,但这可能不是最好的解决方案。
好吧,我希望这有帮助!