gpt4 book ai didi

android - 使用 gradle 链接到带有 NDK 的预建库

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:44:03 27 4
gpt4 key购买 nike

我有一个包含 NDK 代码的 Android 项目。从这段代码中,我需要调用其他使用 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 构建……东西……我不确定用什么词形容它好。

无论如何,你会想要关注this教程。它非常适合我自己的东西。您也很有可能想要阅读 this introduction to Android.mk files .这对于调试和确保链接正确非常有帮助。

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

  1. undefined symbol 错误,这绝对是一件痛苦的事情。您很可能希望消除这种依赖性。我在这个问题上花了好几个小时,最后得出结论,文件肯定不在 那里。不知何故。
  2. 您可能还会遇到无法找到您正在处理的文件的扩展名的情况(因此,它可能会说 foo1.so 找不到库 foo2.so.# 尽管您链接了 foo2 .so. 如果发生这种情况,您可能必须编译一个 .a 库,但这可能不是最佳解决方案。)。

好了,希望对您有所帮助!

关于android - 使用 gradle 链接到带有 NDK 的预建库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24027063/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com