2012-01-10 62 views
2

我正在尝试使用DllImport获取在模拟器中使用Monodroid的Native C/C++库。我主要在Windows/Visual Studio 2010中开发。Mono Android Monodroid Native Library DllNotFoundException

我使用Ubuntu虚拟机为x86和armeabi平台构建了一个使用Android NDK工具的本机C/C++库(ZeroMQ)。这是正确的 - 模拟器的x86和真正的设备的armeabi? (这在iPhone/MonoTouch上肯定是这种情况 - 尽管在这种情况下,静态链接libzmq.a文件和DllImport __Internal)

我已将x86版本的libzmq.so添加到我的MonoDroid项目下的目录结构lib \ x86 \ libzmq.so

当我第一次尝试构建/部署到模拟器时,出现'无法确定abi类型'的错误,因此我已将x86添加到AndroidNativeLibrary Include =“lib \ x86 \ libzmq。所以“>项目项目组。然后部署。

我有一个的DllImport为函数调用函数[DllImport( “libzmq”

我libzmq.so试过,LIB/86/libzmq,LIB/86/libzmq.so等,后来我打电话该方法dllimport导入(在模拟器中运行),我总是得到一个DllNotFoundException

谁能给我一些指导

编辑:?读取另一支答案,指出仿真器使用armeabi的.so库后,我已经删除了x86/libzmq并添加了我的lib/armeabi/libzmq.so作为AndroidNativeLibrary。我还删除了项目文件Abi条目,确实该项目建成并部署良好。

但是,当我尝试调用DllImported函数时,I 仍然会得到DllNotFoundException。有任何想法吗?

非常感谢

回答

0

好吧,我终于得到了它的工作!无论出于何种原因,ZeroMQ无法使用当前/最新的NDK r7正确构建。 http://www.zeromq.org/build:android的使用说明使用NDK r6。我还下载了旧版本的NDK r5b(这是找到下载的最简单的旧版本),并使用它重建了ZeroMQ。结果,它现在可以在模拟器和手机上运行!

1
0

(这是我在ZeroMQ邮件列表中回复您的电子邮件的重复内容)。

在您的Mono项目中使用不正确的平台目标可能导致此错误。我不确定Mono/MonoDevelop是否支持这一点,但您可能需要创建一个ARM平台目标,而不是x86/x64/Any CPU。

如果您尝试在x64目标程序集与x86本机库之间进行P/Invoke互操作,或反之亦然,则会遇到相同的错误。

如果您使用的是桥接单声道和libzmq的clrzmq绑定,您将需要创建ARM的新平台和目标重建绑定。该解决方案目前仅定义x86和x64平台目标。