mono和libgdiplus - 找不到libgdi

时间:2014-03-23 20:15:36

标签: mono gdi+

每当我的应用程序调用libgdi时,我都会得到以下结果:

An exception was thrown by the type initializer for System.Drawing.GDIPlus --->
System.DllNotFoundException: /opt/mono-3/lib/libgdiplus.so
     at (wrapper managed-to-native) System.Drawing.GDIPlus:GdiplusStartup(ulong&,System.Drawing.GdiplusStartupInput&,System.Drawing.GdiplusStartupOutput&)
     at System.Drawing.GDIPlus..cctor () [0x000cc] in /build/buildd/mono-3-opt-3.2.3/mcs/class/System.Drawing/System.Drawing/gdipFunctions.cs:127

好吧,足够公平:我需要在一个单声道中找到它的libgdi。我有理由确定我之前已经制作并安装了它,所以我开始查看ldconfig以查看它的位置:

libgdiplus.so.0 (libc6,x86-64) => /usr/local/lib/libgdiplus.so.0
libgdiplus.so.0 (libc6,x86-64) => /usr/lib/libgdiplus.so.0
libgdiplus.so (libc6,x86-64) => /usr/local/lib/libgdiplus.so
libgdiplus.so (libc6,x86-64) => /usr/lib/libgdiplus.so

我天真地认为,如果库在ldconfig中可识别,则mono可以找到并使用它。那不是这样吗? /usr/local/libusr/lib之间是否存在需要解决的歧义?

无论如何,我我可以告诉mono使用/usr/lib/libgdiplus.so来查看dllmap,如下所示:

<dllmap dll="gdiplus" target="/usr/lib/libgdiplus.so" os="!windows"/>
<dllmap dll="gdiplus.dll" target="/usr/lib/libgdiplus.so" os="!windows"/>
<dllmap dll="/opt/mono-3/lib/libgdiplus.so" target="/usr/lib/libgdiplus.so" os="!windows"/>

...但作为一个新手,我不确定这是对的。 Mono仍然声称它在运行时找不到libgdi,而我只是出于想法。

可以这样使用dllmap吗?如果是这样,我哪里错了?如果没有,我可以获得下一步尝试的建议吗?

为了它的价值,我试图使用MonoDevelop 4.2.3中的Mono 3.2.4运行。

1 个答案:

答案 0 :(得分:1)

尝试创建指向/usr/lib/libgdiplus.so的符号链接/opt/mono-3/lib/libgdiplus.so。