Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在OSX上使用MonoKickstart时未找到gdiplus.dll_C#_Macos_Mono_System.drawing_Opentk - Fatal编程技术网

C# 在OSX上使用MonoKickstart时未找到gdiplus.dll

C# 在OSX上使用MonoKickstart时未找到gdiplus.dll,c#,macos,mono,system.drawing,opentk,C#,Macos,Mono,System.drawing,Opentk,我一直在使用MonoKickstart让我们的项目——它构建在OpenTK上——在OSX上运行。我让程序完全正常工作,但一旦我删除了Mono.framework(实际上是重命名的),就会出现以下错误: [ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: An exception was thrown by the type initializer for System.Drawing.GDIPlus ---

我一直在使用MonoKickstart让我们的项目——它构建在OpenTK上——在OSX上运行。我让程序完全正常工作,但一旦我删除了Mono.framework(实际上是重命名的),就会出现以下错误:

[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: An exception was thrown by the type initializer for System.Drawing.GDIPlus ---> System.DllNotFoundException: gdiplus.dll
  at (wrapper managed-to-native) System.Drawing.GDIPlus:GdiplusStartup (ulong&,System.Drawing.GdiplusStartupInput&,System.Drawing.GdiplusStartupOutput&)
  at System.Drawing.GDIPlus..cctor () [0x00000] in <filename unknown>:0 
  --- End of inner exception stack trace ---
  at System.Drawing.Bitmap..ctor (System.String filename, Boolean useIcm) [0x00000] in <filename unknown>:0 
  at System.Drawing.Bitmap..ctor (System.String filename) [0x00000] in <filename unknown>:0 
  at (wrapper remoting-invoke-with-check) System.Drawing.Bitmap:.ctor (string)
 (...)
[ERROR]致命的未处理异常:System.TypeInitializationException:System.Drawing.GDIPlus的类型初始值设定项引发了异常-->System.DllNotFoundException:GDIPlus.dll
在(包装器管理为本机)System.Drawing.GDIPlus:GdiplusStartup(ulong&,System.Drawing.GdiplusStartupInput&,System.Drawing.GdiplusStartupOutput&)
位于System.Drawing.GDIPlus..cctor()[0x00000]中:0
---内部异常堆栈跟踪的结束---
位于System.Drawing.Bitmap..ctor(System.String文件名,布尔值useIcm)[0x00000]中:0
位于System.Drawing.Bitmap..ctor(System.String文件名)[0x00000]中:0
在(包装器远程处理通过检查调用)System.Drawing.Bitmap:.ctor(字符串)
(...)
我已尝试将mono安装中的“libgdiplus.0.dylib”添加到附带的osx文件夹(mono动态库也位于其中)和可执行文件文件夹中。创建dllmap除了更改错误消息中的文件名外,什么都不做


我使用的是sgen变体,因此在x64中运行不是问题所在(有关此问题的讨论,请参见)。

此错误意味着mono无法找到您尝试使用的某个类所需的库

为了保持与.NET Framework的兼容性,mono使用与windows相同的库名称。这些名称使用DLLMAP映射到linux库名称

(将“.so”替换为MacOS X的“dylib”)

如果应用程序或assembly.config文件中的DllMap条目中未明确指定库位置,Mono将在以下几个位置搜索库:

从中加载引用图像的目录。 在任何地方,系统的动态加载程序都配置为查找共享库。例如,在Linux上,$LD_LIBRARY_PATH环境变量和/etc/LD.so.conf文件中指定了这一点。在windows上使用$PATH环境变量。 解决此问题的下一步是在系统上定位文件

$find/usr-名称libgdiplus.so /usr/local/lib/libgdiplus.so 啊哈!就在那里。那为什么mono找不到呢

默认情况下,在linux的所有发行版中,动态链接器只为/lib和/usr/lib中的文件创建缓存。因为您已经将库放在/usr/local/lib中,所以它不知道。可以使用以下命令对此进行验证:

ldconfig-p | grep libgdiplus 该命令不应产生任何输出,因为它不知道该文件

解决此问题的正确方法是添加/usr/local/lib作为ldconfig索引的路径之一。为此,将路径添加到/etc/ld.so.conf,并以root用户身份运行“ldconfig”,这将强制重建缓存

动态链接器现在应该知道此路径中的所有库。您可以通过再次键入上述命令来验证这一点:

$ldconfig-p | grep libgdiplus libgdiplus.so(libc6)=>/usr/local/lib/libgdiplus.so 耶!您的应用程序现在应该可以正常运行了

注意:如上所述,您还可以将$LD_LIBRARY_PATH环境变量设置为包含库的路径,但不建议这样做,因为它可能会导致其他问题,并且更难维护


有关更多信息,请查看

您安装了哪个版本的Mono?(3.10与GDIPlus有问题)以及您是如何安装Mono的(最近用户从brew安装Mono时遇到问题(也与GDIPlus有问题)…使用我通过原始Mono dmg安装的Mono。我想我已经安装了3.12,但我不确定哪个版本嵌入了MonoKickstart(我看到有人提到mono 2.10.9,但我很确定我们的游戏根本不会在上面运行)。我将尝试使用一些可执行文件。我尝试使用boehm版本的Mono。然而,这仍然不能解决问题。我怀疑问题在于x64和x86之间的差异,但默认kick可执行文件的fat版本和x86版本都会导致相同的错误。我尝试用mono附带的libmono-2.0.1.dylib替换libmono-2.0.1.dylib,但这会导致以下错误:dyld:Symbol not found:_kcflocaleContryCode您使用的是哪个OSX版本?
find/-name\*gdiplus\*
在安装了mono 4.2.0的OSX Yosemite上不会产生任何效果。有什么想法吗?看起来我需要安装mono mdk,但是现在所需的库仍然没有被链接到,而且我无法找到
ldconfig-p的OSX变体