2013-03-26 69 views
1

我發現自己無法在Mono 3.0(OpenSUSE 12.3 x64)上運行任何WinForms應用程序。我得到的問題是System.TypeInitializationException: An exception was thrown by the type initializer for System.Windows.Forms.XplatUI ---> System.TypeInitializationException: An exception was thrown by the type initializer for System.Drawing.GDIPlus ---> System.DllNotFoundException: /usr/local/lib/libgdiplus.so。它找不到libgdiplus.so的原因是它不在我的系統中的/usr/local/lib中,而是/usr/lib64。我知道/usr/lib64在ldconfig的路徑中,我也嘗試將/etc/mono/config中的gdiplus的dllmap條目更改爲直接指向它,並且錯誤仍然存​​在。Mono DllNotFound錯誤

我有一個試圖運行MoMA的完整日誌MONO_LOG_LEVEL="debug"here.它似乎忽略了配置文件並直接在錯誤的地方尋找SO。

有沒有什麼辦法讓它在正確的地方找到這個SO?

+0

您的應用程序是64位還是32位應用程序? – 2013-03-26 01:58:12

+0

我假設你已經運行'ldconfig -v'來更新庫?它還應該打印出路徑,以便確認命中'/ usr/lib64'。 – 2013-03-26 02:13:14

+0

@ chue-x是的,我運行ldconfig並且'/ usr/lib64'在列表中。另外,libgdiplus.so特別在ldconfig的庫列表中。 @Timo都不是 - 它是.NET字節碼,可以在任何具有Mono或.NET Framework的平臺上運行。 – PrinceBilliard 2013-03-26 14:04:53

回答

3

@PrinceBilliard - 根本原因是對/data/config.in的更改,它將(部分)硬編碼路徑添加到libgdiplus.so。真正的修復方法是修改源代碼以從條目中刪除路徑,在條目中僅保留libgdiplus.so
如果在配置文件中有路徑,Mono將使用該路徑並忽略ldconfig緩存和LD_LIBRARY_PATH。如果沒有路徑,Mono將嘗試使用不同後綴的庫名稱以及引用ldconfig緩存和LD_LIBRARY_PATH。

我在包規範中處理它的方式是添加%post任務來編輯/ mono/config並從條目中刪除路徑。 RobFlum