2010-11-07 52 views
1

目前我正在試圖讓我的C#程序在Linux上運行。在我的Linux機器上使用mono,程序運行良好。所以我用mkbundle,它都編譯正確。但是,當我嘗試任何其他的Linux機器上運行的捆綁程序我得到這個錯誤:試圖運行單捆綁方案,但越來越缺少libgdiplus例外

Unhandled Exception: 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: libgdiplus.so.0 

這是mkbundle命令我使用:

mkbundle --static program.exe --deps -o a.out 

我也使用mkbundle2沒有運氣嘗試。

我想也許有辦法具體包括與mkbundle庫(比如告訴在哪裏可以找到libgdiplus)。它應該在我使用mkbundle時被鏈接,但我想這不是因爲當我在任何其他Linux機器上運行我的程序(不運行單聲道)時,我得到這個錯誤。

兩臺機器都運行Ubuntu 10.10 AMD64。

回答

2

Extrernal幫助程序庫沒有捆綁在可執行文件中,所以您或者需要分發libgdiplus,或者使用-oo選項來創建一個目標文件,您將在程序中鏈接到您需要的庫。當然,您還必須添加一個dllmap條目,以便從例如libgdiplus映射到__Internal。

請注意,如果您僅僅是按照原樣分發由mkbundle生成的程序,那麼您違反了mono的免費軟件許可證,因此除非您有Novell的特殊許可證,否則您的程序是免費軟件,或者您也是分發應用程序的目標文件,以便人們可以重新鏈接自己,你不應該使用mkbundle。

+0

你能提供包括libgdiplus作爲一個例子在mkbundle步驟之後的cc鏈接器/編譯器中的lib? – 2014-08-18 02:19:26

0

如果你的「洋」的機器上運行此:

ldd a.out 

你應該能夠看到共享它期待庫。您可能需要分發libgdiplus.so與您的程序或者是靜態鏈接在libgdiplus.a

+0

不正確,gdiplus沒有在ldd上列出使用mkbundle獲得的可執行文件 – vincenzoml 2017-05-11 15:33:22

6

單聲道3.0配置文件用於WINDOS有壞的條目多爾的libgdiplus引用。

更改文件C的兩行:\程序文件(x86)\單-3.0.2 \等\單聲道\ CONFIG 如下:

<dllmap dll="gdiplus" target="/tmp/install/lib/libgdiplus.so" os="!windows"/> 
<dllmap dll="gdiplus.dll" target="/tmp/install/lib/libgdiplus.so" os="!windows"/> 
+0

我認爲這個回答對提問者沒有幫助,因爲它會影響Windows。但對我而言,這非常有幫助,並使我能夠在Windows下運行Mono。謝謝。 – Tobias 2013-04-24 14:32:02

+0

我沒有Xamarin bug報告帳戶,有人可以向mono團隊報告這件事嗎? – 2014-08-01 12:47:55

相關問題