使用Xamarin的NDK Android应用程序中的DllNotFoundException

使用Xamarin的NDK Android应用程序中的DllNotFoundException,第1张

概述我想制作一个使用NDK和C的 Android应用程序 我在Xamarin Studio中创建了一个名为ndkTest的新Android App解决方案.我添加了一个文件夹jni,并在那里添加了这些文件: > Android.mk > Application.mk > my.h > test.cpp 以下是每个内容: Android.mk: LOCAL_PATH := $(call my-dir) 我想制作一个使用NDK和C的 Android应用程序

我在Xamarin Studio中创建了一个名为ndkTest的新AndroID App解决方案.我添加了一个文件夹jni,并在那里添加了这些文件:

> AndroID.mk
> Application.mk
> my.h
> test.cpp

以下是每个内容:

AndroID.mk:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODulE := ndkTestLOCAL_SRC_fileS := test.cppLOCAL_STATIC_liBRARIES := myinclude $(BUILD_SHARED_liBRARY)

Application.mk:

APP_ABI := armeabi-v7aAPP_STL := stlport_static

my.h:

#ifndef __MY_H__#define __MY_H__#define MY_CONST    1#ifdef __cplusplusextern "C"#endifshortmy_func( short          my_param );#endif /* __MY_H__ */

TEST.CPP:

// test.cpp//#include <stdio.h>#include <stdlib.h>#include <string.h>#include <memory.h>#include <iostream>#include <fstream>#include <vector>#include "my.h"#define SOME_CONST     2*MY_CONSTshort  some_short;#ifdef __cplusplusextern "C"{#endifstatic voID static_func_0(){some_short = 0;}static voID static_func_1(){some_short = 1;}#ifdef __cplusplus}#endifstatic voID static_print(){printf("static_print\n");printf("some_short = %d\n",some_short);}extern "C" short getSomeShort(){printf("myExtern\n");return some_short;}

这里有趣的地方:
我已经安装并正确配置了ndk.在命令行中,我cd到项目目录并运行

ndk-build

我收到这个错误:

make.exe: *** No rule to make target [path to ndk]/sources/cxx-stl/stlport/test.cpp',needed byobj/local/armeabI/ObJs/ndkTest/test.o'. Stop.

这很奇怪,但无论如何,我可以在AndroID.mk中指定test.cpp的完整路径并构建:

[armeabi] Compile++ thumb: ndkTest <= test.cpp[armeabi] Sharedlibrary : libndkTest.so[armeabi] Install : libndkTest.so => libs/armeabi/libndkTest.so

所以现在我有了.so文件.将此添加到MainActivity.cs之后:使用System.Runtime.InteropServices;我补充说:

[Dllimport("libndkTest",EntryPoint="getSomeShort")]static extern short getSomeShort();

我在OnCreate中添加了一个调用.我得到一个DllNotFoundException.
我错过了什么?

解决方法 如果我不得不猜测我会说你应该在你的Dllimport语句中将libndkTest重命名为ndkTest.

[Dllimport("ndkTest")]static extern short getSomeShort();

我目前无法测试你的版本,但它以这种方式为我工作.

我假设你已经完成了它,但你应该仔细检查你的库构建 *** 作和位置,它应该在lib / your_abi / your_lib.so下.我记得因为嗅探路径错误而撞了我的头2天……

总结

以上是内存溢出为你收集整理的使用Xamarin的NDK Android应用程序中的DllNotFoundException全部内容,希望文章能够帮你解决使用Xamarin的NDK Android应用程序中的DllNotFoundException所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1123850.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存