我写了一个NNAPI的演示。但是应用程序崩溃时出现了"java.lang.UnsatisfiedLinkError: dlopen failed:无法找到符号java.lang.UnsatisfiedLinkError“的错误。在我删除了包含ANeuralNetworksModel_identifyInputsAndOutputs(and的行之后,该应用程序不再崩溃,它保留了关于NNAPI的其他行,比如ANeuralNetworksModel_addOperation等等)。
我的minSdkVersion,compileSdkVersion,targetSdkVersion都是27岁。
是窃听器,还是我的错?你能帮帮我吗?提前谢谢。
感谢下面的优秀解决方案,我编写了一个NNAPI包装器库和演示,并在GitHub上发布了它,在电话上部署一个模型只需要四行。我希望我的项目能帮助那些对NNAPI感兴趣的开发人员。
发布于 2017-11-01 18:20:16
不幸的是,NN在NDK发布之前被请求更改,但没有及时进入OMR1Beta 1。换句话说,NDK比beta图像更最新。这将在下一个O测试版(或发行版)时自行解决。我不确定时间线是什么)启动。
同时,测试版中该函数的名称是ANeuralNetworksModel_setInputsAndOutputs。下面这样的内容应该可以工作,并且会让您知道什么时候可以删除解决方案(注意:我还没有测试这一点,因为我没有运行beta版本的设备,因此可能需要进行一些小的修改)。
// TODO: Remove when O MR1 Beta 2 is available.
__attribute__((weak))
extern "C" int ANeuralNetworksModel_setInputsAndOutputs(
uint32_t inputCount, const uint32_t* inputs, uint32_t outputCount,
const uint32_t* outputs);
extern "C" int ANeuralNetworksModel_identifyInputsAndOutputs(
uint32_t inputCount, const uint32_t* inputs, uint32_t outputCount,
const uint32_t* outputs) {
if (ANeuralNetworksModel_setInputsAndOutputs == nullptr) {
__android_log_print(ANDROID_LOG_ERROR,
"ANeuralNetworkdModel_setInputsAndOutputs not found. Remove workarounds.");
abort();
}
return ANeuralNetworksModel_setInputsAndOutputs(
inputCount, inputs, outputCount, outputs);
}发布于 2017-12-07 10:51:57
发生此问题是因为SDK包不正确。将SDK包更新为最新的。如果SDK管理器没有显示任何更新,那么在Android中,从File菜单中选择无效缓存并重新启动。一旦完成,Android将询问是否存在任何挂起的SDK更新。安装更新后,使用AVD管理器重新创建新的Virtual (如果您使用的是Virtual )。你的节目准备好了..。
SDK\system-images\android-27\google_apis\x86\source.properties
Pkg.Desc=System Image x86 with Google APIs.
****Pkg.Revision=2****
Pkg.Dependencies=emulator#26.1.3
****AndroidVersion.ApiLevel=27****
SystemImage.Abi=x86
SystemImage.TagId=google_apis
SystemImage.TagDisplay=Google APIs
SystemImage.GpuSupport=true
Addon.VendorId=google
Addon.VendorDisplay=Google Inc.https://stackoverflow.com/questions/46987602
复制相似问题