Frage

habe ich eine sehr einfache .NET Command Anwendung, dass ich zu portieren möchte OS X.
Ich kann es mit „mono app.exe“
laufen Allerdings werden die Ziele Maschinen nicht haben Mono installiert. So wollte ich in der App bündeln mono.

Um dies zu tun, habe ich mkbundle2:

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

Dies funktioniert ohne Fehler, Ausgabe:

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

Das kann ich auf der Maschine zu bauen auszuführen. Wenn ich ohne Mono auf einer Maschine ausführen wird es jedoch nicht ausgeführt werden.

Ausgabe:

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

Was bin ich? Wie füge ich die tatsächliche Mono-Laufzeit?

EDIT: Ich habe auch versucht die --static Flag hinzuzufügen. Das gibt meine App eine neue Lizenz aber, das ich bin nicht sicher, ich will. Ich habe dann keine Beschwerden mehr über libmono, sondern um libgthread-2.0.0.dylib

War es hilfreich?

Lösung

Also, das Problem ist, dass mkbundle Links zu einem gewissen Datei dass residiert auf meinem Mac, wo ich es erwartet, dass sie zu bündeln. Man kann deutlich sehen, dass durch die verknüpften Ressourcen mit dem Befehl aufzuzublicken:

otool -L ./BundledApp

(wobei bundledApp die Ausgabe von mkbundle2 ist)

Um es zu beheben, landete ich mit den mkbundle nant-Aufgaben aus dem monobjc Projekt:
http://www.monobjc.net/index.php?page=mkbundle- Aufgabe

Ich denke, sie sind so ziemlich eine automatisierte Version von dem, was ich fand hier:
http://code.google.com/p/cocoa-sharp- dev / wiki / RedistributableAppWithoutInstallingMono
Aber das gab mir Ausnahmen.

Die Aufgabe Monobjc Nant funktioniert ohne Probleme und ist bei weitem die einfachste Lösung. Ich habe noch mehrere Dateien, aber das ist in Ordnung, zumindest funktioniert es jetzt.

Andere Tipps

Versuchen ausgeführt wird:

  

mkbundle -o bundledappname program.exe   --deps

(einen anderen Namen für das Bündel verwenden, anstatt das gleiche wie Ihr program.exe und setzen nicht EXE-Erweiterung auf die Option -o)

Auch haben Sie versucht, macpack ?

Für weitere Informationen darüber, wie Pakete erstellen lesen hier und das Handbuch von mkbundle

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top