2012-01-10 59 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平臺目標。