我正在开发一个使用JNI的Android应用程序。
命令javah -jni com.company.tests.MainRenderer给了我以下输出:
/*
* Class: com_company_tests_MainRenderer
* Method: nativeInit
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_company_tests_MainRenderer_nativeInit
(JNIEnv *, jclass);
/*
* Class: com_company_tests_MainRenderer
* Method: nativeRender
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_company_tests_MainRenderer_nativeRender
(JNIEnv *, jclass);命令nm -Ca libRotateJNI.so给了我以下输出:
00001c25 T Java_com_company_tests_MainRenderer_nativeInit(_JNIEnv*, _jclass*)
00001c29 T Java_com_company_tests_MainRenderer_nativeRender(_JNIEnv*, _jclass*)下面是这些函数的定义:
void Java_com_company_tests_MainRenderer_nativeInit( JNIEnv* env, jobject thiz )
{
// ...
}
void Java_com_company_tests_MainRenderer_nativeRender( JNIEnv* env, jobject thiz )
{
// ...
}并用下面的消息运行它:
WARN/dalvikvm(639): No implementation found for native Lcom/company/tests/MainRenderer;.nativeInit ()V我确信库已经加载了。你知道我该怎么解决这个问题吗?
发布于 2011-09-15 23:39:49
我怀疑您使用C++编译器编译了您的本机方法,并且没有为它们提供extern "C"链接。您提供给nm的-C选项设计了C++的名称,但实际上,这些符号的名称与nm正在寻找的名称不同,因为代码是使用C++链接编译的。将您的C++代码封装在extern "C"块中,这应该会让事情变得清晰起来。
发布于 2011-09-15 23:44:25
我不知道你的MainRenderer是什么,也不知道你的本地库是什么,但是我的c文件函数总是看起来像这样:
void Java_com_ndkfoo_NDKFooActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) {我调用的方法/类是NDKFooActivity,它调用的是一个本机函数...
https://stackoverflow.com/questions/7433511
复制相似问题