【发布时间】:2014-09-18 11:55:36
【问题描述】:
我找到了有关如何利用 NDK 在 Android 中链接和使用 c/c++ 代码的说明。我想知道的是,当您拥有来自第三方的 .so 时,此过程有何不同?
调用 System.loadLibrary() 似乎可以正确加载库,但每当我尝试调用所需的方法时,都会收到 UnsatisfiedLinkError。
函数原型根据编译.so文件的第三方提供的详细信息进行声明。有什么方法可以有效地反编译文件以至少检查原型是否正确?
预编译的 .so 库的链接过程是否有所不同?也许我遗漏了一些导致链接错误的步骤。
编辑:
我希望我可以发布代码,但我只能用手机写。我的 Android.mk 文件按照您的预期设置,并引用了 .so 文件和 $(PREBUILT_SHARED_LIBRARY) 规范。
我的代码所做的只是加载库并使用 native 关键字声明函数原型。当我尝试调用该函数时,出现链接错误。
【问题讨论】:
-
第三方库是否打算与 JNI 一起使用?您不能通过 JNI 调用 任意 C++ 函数 - 只能调用特别命名的函数,例如
Java_packagename_classname_methodname()。如果是,您是否匹配 Java 端的类和包名称?该库可能不是为您的包和类构建的。 -
我没有考虑类和包的命名。有人告诉我该类旨在与 JNI 一起使用,但我得到的只是函数原型和 .so 文件。
标签: java android c++ android-ndk