我正在尝试在C#中完成我的第一步,并希望构建一个空的GTK窗口作为我的第一个任务。通过macports
我安装了以下软件包:
我也在Mono主页上使用MonoDevelop。
我将gtk-sharp.dll
(来自/opt/local/lib/mono/gtk-sharp-2.0
)添加到我的参考资料中。
我的代码如下所示:
using System;
using Gtk;
namespace lolbr_client
{
class MainClass
{
public static void Main (string[] args)
{
Console.WriteLine("Loading..");
Window window = new Window("test");
}
}
}
当我编译并运行该代码片段时,它似乎找到并包含GTK库,它将“Loading ..”打印到控制台,但Console.WriteLine()
之后的行会导致此错误:
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
虽然我的文件系统上不存在特定的.dll,但快速locate gtksharpglue-2
显示了以下文件:
/Library/Frameworks/Mono.framework/Versions/2.10.9/lib/libgtksharpglue-2.so
/opt/local/lib/libgtksharpglue-2.a
/opt/local/lib/libgtksharpglue-2.la
/opt/local/lib/libgtksharpglue-2.so
这些文件对我有帮助吗?从这里调试/修复此问题的后续步骤是什么?我已经搜索了Google,但要么我对这个主题太新,要么无法识别有用的信息,要么就不存在有用的信息。有人能帮我吗?提前谢谢!
答案 0 :(得分:11)
如何运行GTK Sharp MONO应用程序(例如使用Xamarin Studio编译)的解决方案如下:
将您的mono / gtk-sharp应用程序编译为Release
像这样创建shell脚本文件(bash)(无论如何都要命名)
[sharp]!/bin/sh
export DYLD_FALLBACK_LIBRARY_PATH="/Library/Frameworks/Mono.framework/Versions/Current/lib:$DYLD_FALLBACK_LIBRARY_PATH:/usr/lib"
exec /Library/Frameworks/Mono.framework/Versions/Current/bin/mono ./AsketicExcel.exe
_3。然后你可以运行这个表单终端或者你可以使用这个打包工具http://sveinbjorn.org/platypus并创建正常的OSX应用程序:)(在包中包含你在发布目录中的所有文件)
然后,为了在其他Mac上运行此应用程序,您需要安装GTK#&amp;单声道运行时http://www.go-mono.com/mono-downloads/download.html
最后它看起来像:
答案 1 :(得分:4)
我发现了这个问题,我的dllmap
不完整。
我在/Library/Frameworks/Mono.framework/Versions/2.10.9/etc/mono/config
添加了以下几行:
<dllmap os="osx" dll="libgtk-win32-2.0-0.dll" target="/Library/Frameworks/Mono.framework/Versions/2.10.9/lib/libgtk-quartz-2.0.0.dylib" />
<dllmap os="osx" dll="glibsharpglue-2" target="/Library/Frameworks/Mono.framework/Versions/2.10.9/lib/libglibsharpglue-2.so" />
<dllmap os="osx" dll="libgthread-2.0-0" target="/Library/Frameworks/Mono.framework/Versions/2.10.9/lib/libgthread-2.0.0.dylib" />
<dllmap os="osx" dll="libgthread-2.0-0.dll" target="/Library/Frameworks/Mono.framework/Versions/2.10.9/lib/libgthread-2.0.0.dylib" />
<dllmap os="osx" dll="libglib-2.0-0.dll" target="/Library/Frameworks/Mono.framework/Versions/2.10.9/lib/libglib-2.0.0.dylib" />
<dllmap os="osx" dll="libgobject-2.0-0.dll" target="/Library/Frameworks/Mono.framework/Versions/2.10.9/lib/libgobject-2.0.0.dylib" />
答案 2 :(得分:1)
进入这个问题,虽然Fabian的回答是正确的,但对我来说这不是解决方案。根据{{3}},dllmap
的以下条目需要添加到/Library/Frameworks/Mono.framework/Versions/Current/etc/mono/config
(删除了几个重复项)。
<dllmap os="osx" dll="glibsharpglue-2" target="/Library/Frameworks/Mono.framework/Versions/Current/lib/libglibsharpglue-2.so" />
<dllmap os="osx" dll="gthread-2.0.0" target="/Library/Frameworks/Mono.framework/Versions/Current/lib/libgthread-2.0.0.dylib" />
<dllmap os="osx" dll="gthread-2.0" target="/Library/Frameworks/Mono.framework/Versions/Current/lib/libgthread-2.0.dylib" />
<dllmap os="osx" dll="glib-2.0.0" target="/Library/Frameworks/Mono.framework/Versions/Current/lib/libglib-2.0.0.dylib" />
<dllmap os="osx" dll="glib-2.0" target="/Library/Frameworks/Mono.framework/Versions/Current/lib/libglib-2.0.dylib" />
<dllmap os="osx" dll="glibsharpglue-2" target="/Library/Frameworks/Mono.framework/Versions/Current/lib/libglibsharpglue-2.so" />
<dllmap os="osx" dll="gtksharpglue-2" target="/Library/Frameworks/Mono.framework/Versions/Current/lib/libgtksharpglue-2.so" />
<dllmap os="osx" dll="gobject-2.0.0" target="/Library/Frameworks/Mono.framework/Versions/Current/lib/libgobject-2.0.0.dylib" />
<dllmap os="osx" dll="gobject-2.0" target="/Library/Frameworks/Mono.framework/Versions/Current/lib/libgobject-2.0.dylib" />
<dllmap os="osx" dll="gtk-quartz-2.0.0" target="/Library/Frameworks/Mono.framework/Versions/Current/lib/libgtk-quartz-2.0.0.dylib" />
<dllmap os="osx" dll="gtk-quartz-2.0" target="/Library/Frameworks/Mono.framework/Versions/Current/lib/libgtk-quartz-2.0.dylib" />