2012-10-08 31 views
0

我正在移植一些C#代碼,我們在Windows上通過Mono在Mac上使用。在我們的代碼中,我們調用一個非託管的C++ dll。不幸的是,我們的構建過程只能在Mac上發佈Framework文件而不是dylib文件。在Mono Mac上的P/Invoke到.framework文件中

當我移植我的Mono代碼時,一切正常,但P \ Invoke進入框架文件。我試圖將框架文件添加到應該在默認搜索路徑中的/ Library/Frameworks文件夾,但我一直收到DllNotFound異常。根據Mono Interop Guide Mono將.so添加爲在Mac上搜索的擴展名存在問題。所以我嘗試添加一個配置文件,並將目標作爲一個.framework文件,但仍得到相同的異常。 Mono指南提到,使用Frameworks進行P \ Invoke變得更加複雜,但沒有提到確切的問題或如何避開它們。

任何人都知道如何在單聲道中調用框架?

+0

此問題已解決。問題是,即使主框架本身被發現,我的框架依賴的其他庫也不在我的機器上。一旦我複製這些庫,P/Invoke工作正常。 – user408410

回答

0

你可以把你的框架生成的應用程序包內,見我回答這個問題: Setting path of the Native Library for DllImport on Mono for Mac

還要確保框架的安裝目錄相對的Xcode的構建設置爲你的應用程序目錄(即@executable_path/../Frameworks。)組態;見https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPFrameworks/Tasks/CreatingFrameworks.html

當捆綁多個框架時,這尤其重要 - 例如,如果您將P/Invoke放入A.framework中的某個方法,該方法取決於B.framework