试图运行mono捆绑程序,但缺少libgdiplus异常

试图运行mono捆绑程序,但缺少libgdiplus异常,mono,gdi+,mkbundle,Mono,Gdi+,Mkbundle,我目前正试图让我的C程序在Linux上运行。在我的Linux机器上使用mono,程序运行良好。所以我使用了mkbundle,并正确地编译了它。但是,当我尝试在任何其他Linux机器上运行捆绑程序时,我会遇到以下错误: Unhandled Exception: System.TypeInitializationException: An exception was thrown by the type initializer for System.Windows.Forms.XplatUI --

我目前正试图让我的C程序在Linux上运行。在我的Linux机器上使用mono,程序运行良好。所以我使用了mkbundle,并正确地编译了它。但是,当我尝试在任何其他Linux机器上运行捆绑程序时,我会遇到以下错误:

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时,它应该链接进来,但我想这不是因为当我在任何其他不运行mono的Linux机器上运行我的程序时,我会遇到这个错误


这两台机器都在运行Ubuntu 10.10 AMD64。

外部辅助程序库未捆绑在可执行文件中,因此您需要同时分发libgdiplus,或者使用-oo选项创建一个对象文件,该文件将与所需的libs一起链接到程序中。当然,您还必须添加一个dllmap条目,以便从libgdiplus映射到uu Internal


请注意,如果您只是按原样分发由mkbundle生成的程序,您违反了mono的自由软件许可证,因此,除非您有Novell的特别许可证,或者您的程序是自由软件,或者您还分发了应用程序的目标文件,以便人们可以重新链接自己,您不应该使用mkbundle。

外部辅助程序库未绑定到可执行文件中,因此您也需要分发libgdiplus,或者使用-oo选项创建一个对象文件,该文件将与所需的libs一起链接到程序中。当然,您还必须添加一个dllmap条目,以便从libgdiplus映射到uu Internal


请注意,如果您只是按原样分发由mkbundle生成的程序,您违反了mono的自由软件许可证,因此,除非您有Novell的特别许可证,或者您的程序是自由软件,或者您还分发了应用程序的目标文件,以便人们可以重新链接自己,您不应该使用mkbundle。

如果在您的外部计算机上运行以下操作:

ldd a.out

您应该能够看到它所期望的共享库。您可能需要将libgdiplus.so与您的程序或libgdiplus.a中的静态链接一起分发。如果在您的外部计算机上运行以下操作:

ldd a.out

您应该能够看到它所期望的共享库。您可能需要使用程序分发libgdiplus.so,或者可能需要在libgdiplus.a中静态链接。windos的mono 3.0配置文件有错误的条目或libgdiplus引用

更改文件C:\Program Files x86\Mono-3.0.2\etc\Mono\config的两行 详情如下:

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

windos的mono 3.0配置文件的libgdiplus引用条目不正确

更改文件C:\Program Files x86\Mono-3.0.2\etc\Mono\config的两行 详情如下:

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

我认为这个答案对提问者没有帮助,因为它会影响Windows。但对我来说,这非常有帮助,使我能够在Windows下运行Mono。谢谢。我没有xamarin bug报告帐户,有人可以向mono团队报告吗?我认为这个答案对提问者没有帮助,因为它会影响Windows。但对我来说,这非常有帮助,使我能够在Windows下运行Mono。谢谢。我没有xamarin bug报告帐户,有人能向mono团队报告吗?你能提供一个例子,说明在mkbundle步骤后将libgdiplus作为lib包含在cc linker/compiler中吗?你能提供一个例子,说明在mkbundle步骤后将libgdiplus作为lib包含在cc linker/compiler中吗?不正确,ldd未在使用mkbundle获取的可执行文件上列出gdiplus。不正确,ldd未在使用mkbundle获取的可执行文件上列出gdiplus