2012-12-14 12 views
6

私はC#で私の最初のステップをしようとしていて、最初のタスクとして空のGTKウィンドウを構築したいと思っていました。私もからMonoDevelopのを使用モノでOSX:gtksharpglue-2.dllを見つけることができません

macportsを経由して、私は次のパッケージをインストールMonoのホームページ。

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ライブラリが含まれている場合、それはコンソールに「ロード..」が、Console.WriteLine()原因の後の行を出力します。 私のコードは次のようになりますこのエラー:その特定の.dllが私のファイルシステム上に存在していませんが

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 

、迅速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を検索しましたが、私はこのトピックにはあまりにも有益な情報を認識するためには新しく、有用な情報は存在しません。誰か助けてくれますか?前もって感謝します!

答えて

11

(Xamarin Studioで例えばコンパイル)GTKシャープMONOアプリケーションを実行するためにどのように解決策は、次の操作を行うことです。

  1. あなたをコンパイルしますmono/gtk-sharpアプリをリリース

  2. このようなシェルスクリプトファイル(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 
    

enter image description here

_。この形式のターミナルを実行するか、このパッケージツールhttp://sveinbjorn.org/platypusを使用して、通常のOSXアプリケーションを作成することができます:)(リリースディレクトリにすべてのファイルをパッケージに含めます)

次に、このアプリケーションを他のMacで実行するにはそれは次のようになり最終的にはGTK#& Monoランタイムhttp://www.go-mono.com/mono-downloads/download.html

をインストールする必要があります。 enter image description here

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" /> 
+0

これらのdllマップにはgtk-sharpが付いているはずですので、問題の根本原因を見つけて次の開発者のために上流に修正してください。 – knocte

+0

@knocte私はそれを調べます。私は、 'glib'のような依存関係がインストール後に既に設定されていると仮定しているので、問題がどこにあるのか分かりません。あなたはMonoかgtk-sharpな開発者ですか? – Fabian

+0

はい私は両方に貢献しました – knocte

1

aswell、この問題に遭遇したとファビアンの答えは正しい軌道に乗っていたものの、それは私のためのソリューションではありませんでした。this bug filed with Xamarinによれば、/Library/Frameworks/Mono.framework/Versions/Current/etc/mono/configには、dllmapへの次のエントリを追加する必要がありました(いくつかの複製を削除して)。

<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" /> 
関連する問題