OSx 单声道 gtk 你好世界。 Gtk.Container 抛出异常
Posted
技术标签:
【中文标题】OSx 单声道 gtk 你好世界。 Gtk.Container 抛出异常【英文标题】:OSx mono gtk hello world. An exception was thrown for Gtk.Container 【发布时间】:2015-01-20 04:05:02 【问题描述】:在新安装后试用 Mono 中的 hello world 示例。按照 [http://www.mono-project.com/docs/getting-started/mono-basics/][1]:
的说明尝试了 GTK 示例mcs hello.cs -pkg:gtk-sharp-2.0
mono hello.exe
我明白了:
> 2014-11-21 21:45:29.629 mono[45107:1731007] *** WARNING: Method
> userSpaceScaleFactor in class NSView is deprecated on 10.7 and later.
> It should not be used in new applications. Use convertRectToBacking:
> instead.
>
> Unhandled Exception: System.TypeInitializationException: An exception
> was thrown by the type initializer for Gtk.Container --->
> System.DllNotFoundException: gtksharpglue-2 at (wrapper
> managed-to-native)
> Gtk.Container:gtksharp_gtk_container_get_focus_child_offset () at
> Gtk.Container..cctor () [0x00000] in <filename unknown>:0 --- End
> of inner exception stack trace --- at Gtk.Bin..ctor (IntPtr raw)
> [0x00000] in <filename unknown>:0 at Gtk.Window..ctor (WindowType
> type) [0x00000] in <filename unknown>:0 at Gtk.Window..ctor
> (System.String title) [0x00000] in <filename unknown>:0 at
> Hello.Main () [0x00000] in <filename unknown>:0 [ERROR] FATAL
> UNHANDLED EXCEPTION: System.TypeInitializationException: An exception
> was thrown by the type initializer for Gtk.Container --->
> System.DllNotFoundException: gtksharpglue-2 at (wrapper
> managed-to-native)
> Gtk.Container:gtksharp_gtk_container_get_focus_child_offset () at
> Gtk.Container..cctor () [0x00000] in <filename unknown>:0 --- End
> of inner exception stack trace --- at Gtk.Bin..ctor (IntPtr raw)
> [0x00000] in <filename unknown>:0
> at Gtk.Window..ctor (WindowType type) [0x00000] in <filename
> unknown>:0
> at Gtk.Window..ctor (System.String title) [0x00000] in <filename unknown>:0
> at Hello.Main () [0x00000] in <filename unknown>:0
知道是什么原因造成的吗?
【问题讨论】:
【参考方案1】:Jonathan Pryor 在Xamarin forum 中很好地回答了这个问题。他回答中的这些内容帮助了我:
您没有导出 $DYLD_LIBRARY_PATH 或 $DYLD_FALLBACK_LIBRARY_PATH 以便可以找到它。
...
问题是找不到 libgtk-quartz-2.0.0.dylib,因为它安装到 /Library/Frameworks/Mono.framework/Libraries,而不是 /usr/lib(或任何全局)。
首先在您的 shell 中运行以下命令,然后 mono hello.exe
应该可以工作:
export DYLD_FALLBACK_LIBRARY_PATH=/Library/Frameworks/Mono.framework/Versions/Current/lib:/lib:/usr/lib
【讨论】:
请注意,Jonathan 建议创建一个脚本(见下文)。我的经验是 OS X 不能很好地处理涉及 DYLD 变量的环境更改。【参考方案2】:第一条错误信息,
“NSView 类中的 userSpaceScaleFactor 在 10.7 及更高版本中已弃用”
GTK 用户可以忽略。但是,GTK 开发者社区必须在 Apple 删除引用的调用之前更新他们的代码。
Apple Dev Community Notices re userSpaceScaleFactor
用于隔离第二个问题的脚本。不要忘记 chmod +x 。
#!/bin/zsh
export DYLD_FALLBACK_LIBRARY_PATH=/Library/Frameworks/Mono.framework/Versions/Current/lib:/lib:/usr/lib
mono $1.exe
【讨论】:
以上是关于OSx 单声道 gtk 你好世界。 Gtk.Container 抛出异常的主要内容,如果未能解决你的问题,请参考以下文章
mono gtk# - hello world部署到windows
java - 如何在Java响应式中为通量/单声道调用多个服务?