我在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("ndkTest")]static extern short getSomeShort();
我目前无法测试你的版本,但它以这种方式为我工作.
我假设你已经完成了它,但你应该仔细检查你的库构建 *** 作和位置,它应该在lib / your_abi / your_lib.so下.我记得因为嗅探路径错误而撞了我的头2天……
总结以上是内存溢出为你收集整理的使用Xamarin的NDK Android应用程序中的DllNotFoundException全部内容,希望文章能够帮你解决使用Xamarin的NDK Android应用程序中的DllNotFoundException所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)