Android:使用NDK编译so调用时java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String

问题背景:使用NDK将c++源码编译成java可调用的jni接口(符合java ABI的.so动态库)后,调用c++实现的相应方法时报错,意思是未找到该方法。

原因:使用javah将对应的java类生成.h文件后,为了简化文件名我对.h文件进行了修改,修改后直接复制.h文件生成.cpp文件并在该cpp文件中实现对应方法。但我复制完后未将对javah生成的.h文件的重定义检查删除,导致实现的cpp方法无效(因为实现的不是更改后的.h方法,而是javah实现的.h方法)。

举个例子:

1.对JniUtils java类使用javah命令生成com_example_jnitest_ndk_JniUtils.h

2.为了简化文件名,我将javah生成的头文件名修改为JniUtils.h,并直接拷贝该文件修改后缀得到JniUtils.cpp

3.JniUtils.cpp文件内容如下,问题就出现在这一步。注意红框中的头文件重复定义检查,这里检查的是javah生成的头文件,所以这里的JNICALL Java_com_example_jnitest_1ndk_JniUtils_getStringFromCpp (JNIEnv *env,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值