首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UnsatisfiedLinkError问题

UnsatisfiedLinkError问题
EN

Stack Overflow用户
提问于 2011-09-15 23:35:13
回答 2查看 368关注 0票数 0

我正在开发一个使用JNI的Android应用程序。

命令javah -jni com.company.tests.MainRenderer给了我以下输出:

代码语言:javascript
复制
/*
 * 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给了我以下输出:

代码语言:javascript
复制
00001c25 T Java_com_company_tests_MainRenderer_nativeInit(_JNIEnv*, _jclass*)
00001c29 T Java_com_company_tests_MainRenderer_nativeRender(_JNIEnv*, _jclass*)

下面是这些函数的定义:

代码语言:javascript
复制
void Java_com_company_tests_MainRenderer_nativeInit( JNIEnv*  env, jobject thiz )
{
    // ...
}

void Java_com_company_tests_MainRenderer_nativeRender( JNIEnv*  env, jobject thiz )
{
    // ...
}

并用下面的消息运行它:

代码语言:javascript
复制
WARN/dalvikvm(639): No implementation found for native Lcom/company/tests/MainRenderer;.nativeInit ()V

我确信库已经加载了。你知道我该怎么解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-15 23:39:49

我怀疑您使用C++编译器编译了您的本机方法,并且没有为它们提供extern "C"链接。您提供给nm-C选项设计了C++的名称,但实际上,这些符号的名称与nm正在寻找的名称不同,因为代码是使用C++链接编译的。将您的C++代码封装在extern "C"块中,这应该会让事情变得清晰起来。

票数 4
EN

Stack Overflow用户

发布于 2011-09-15 23:44:25

我不知道你的MainRenderer是什么,也不知道你的本地库是什么,但是我的c文件函数总是看起来像这样:

代码语言:javascript
复制
void Java_com_ndkfoo_NDKFooActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) {

我调用的方法/类是NDKFooActivity,它调用的是一个本机函数...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7433511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档