未找到本机的实现
Posted
技术标签:
【中文标题】未找到本机的实现【英文标题】:No implementation found for native 【发布时间】:2016-04-01 11:14:26 【问题描述】:我有一个运行良好的测试项目。我尝试在我的其他项目中使用本地库(以及相同的方法),但出现此错误:
W/dalvikvm(22240): No implementation found for native Lcom/example/myapp/Serial;.open:(Ljava/lang/String;IIZ)Ljava/io/FileDescriptor;
这是 Serial 类中的 JNI 代码:
// JNI
private native static FileDescriptor open(String path, int baudrate,
int flags, boolean flowCon);
public native void close();
static
System.loadLibrary("test_lib");
我的 libs 文件夹中的三个文件夹中有“libtest_lib.so”:armeabi、armeabi-v7a、x86。
我调试了应用程序,似乎在调用本机方法“open”之前需要调用“System.loadLibrary”。所以我看不到错误的其他选项..
【问题讨论】:
如果我没记错的话,方法签名不匹配。 但我使用了相同的方法(复制粘贴)和相同的库.. 那怎么可能呢? 我的意思是和其他项目一样。 在您的库中未找到Serial.open()
。您使用的是显式注册还是隐式注册?它是如何声明的?尝试使用 nm
列出库中的符号以查看实际字符串。另见developer.android.com/training/articles/…
【参考方案1】:
您可能从另一个项目复制并粘贴了您的 c 文件中的原型重新定义为 Java_Pacakage_JavaParentClass_functionName(JNIEnv* env, jobject thiz)
【讨论】:
以上是关于未找到本机的实现的主要内容,如果未能解决你的问题,请参考以下文章