使用gradle通过NDK链接到预构建的库



我有一个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的介绍。可文件。这对调试和确保正确链接非常有帮助。

这样做可能会遇到两个问题:

  1. 未定义的符号错误,这可能是绝对的痛苦。更有可能的是,您希望消除这种依赖。我在这个问题上花了几个小时,最后得出结论,文件一定不是那里。在某种程度上。
  2. 您也可能会遇到它无法找到您正在处理的文件的扩展名(因此,它可能会说foo1。所以找不到图书馆了。#尽管你链接了foo2.so。如果发生这种情况,你可能不得不编译一个。a库,但这可能不是最好的解决方案。

好吧,我希望这有帮助!

最新更新