1

OS X に移植したい非常に単純な .NET コマンドライン アプリケーションがあります。
「mono app.exe」で実行できますが
、対象のマシンには mono がインストールされていません。だから、アプリ内にモノをバンドルしたかったのです。

これを行うために、mkbundle2 を使用しました。

mkbundle2 -o bundledapp.exe app.exe --deps

これはエラーなしで動作し、出力:

OS is: Darwin
Sources: 1 Auto-dependencies: True
  embedding: /Users/kclement/Projects/app/build/app.exe
  embedding: /Library/Frameworks/Mono.framework/Versions/2.6.1/lib/mono/2.0/mscorlib.dll
  embedding: /Library/Frameworks/Mono.framework/Versions/2.6.1/lib/mono/gac/System/2.0.0.0__b77a5c561934e089/System.dll
  embedding: /Library/Frameworks/Mono.framework/Versions/2.6.1/lib/mono/gac/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
  embedding: /Library/Frameworks/Mono.framework/Versions/2.6.1/lib/mono/gac/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
  embedding: /Library/Frameworks/Mono.framework/Versions/2.6.1/lib/mono/gac/System.Security/2.0.0.0__b03f5f7f11d50a3a/System.Security.dll
  embedding: /Library/Frameworks/Mono.framework/Versions/2.6.1/lib/mono/gac/Mono.Security/2.0.0.0__0738eb9f132ed756/Mono.Security.dll
Compiling:
as -arch i386 -o temp.o temp.s 
cc -g -o bundledapp.exe -Wall temp.c `pkg-config --cflags --libs mono`  temp.o
Done

これをビルド マシンで実行できます。ただし、モノのないマシンで実行すると、実行されません。

出力:

dyld: Library not loaded: /Library/Frameworks/Mono.framework/Versions/2.6.1/lib/libmono.0.dylib
  Referenced from: /Users/kristof/./bundledapp.exe
  Reason: image not found
Trace/BPT trap

私は何が欠けていますか?実際の mono ランタイムを含めるにはどうすればよいですか?

編集: --static フラグも追加してみました。ただし、これによりアプリに別のライセンスが付与されますが、それが必要かどうかはわかりません。その後、libmono についてではなく、libgthread-2.0.0.dylib について不平を言うようになりました。

4

2 に答える 2

1

したがって、問題は、mkbundle が私の Mac に存在するいくつかのファイルにリンクしていることです。次のコマンドでリンクされたリソースを検索すると、それが明確にわかります。

otool -L ./BundledApp

(ここで bundledApp は mkbundle2 の出力です)

それを修正するために、monobjc プロジェクトの mkbundle nant-tasks を使用することになりました:
http://www.monobjc.net/index.php?page=mkbundle-task

私がここで見つけたもののほぼ自動化されたバージョンだと思います:
http://code.google.com/p/cocoa-sharp-dev/wiki/RedistributableAppWithoutInstallingMono
しかし、それは私に例外を与えました.

Monobjc nant タスクは問題なく動作し、最も簡単なソリューションです。まだ複数のファイルがありますが、問題ありません。少なくとも今は機能しています。

于 2010-08-09T08:20:31.713 に答える
0

実行してみてください:

mkbundle -o bundledappname program.exe --deps

(バンドルには program.exe と同じ名前ではなく別の名前を使用し、.exe 拡張子を -o フラグに付けないでください)

また、macpackを試しましたか?

バンドルの作成方法の詳細については、ここmkbundle の細かいマニュアルを参照してください。

于 2010-08-05T15:57:10.767 に答える