每当我的应用程序调用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/lib
和usr/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运行。
答案 0 :(得分:1)
尝试创建指向/usr/lib/libgdiplus.so的符号链接/opt/mono-3/lib/libgdiplus.so。