nach mkbundle2 verwenden, können Zielmaschine nicht finden libmono.0.dylib
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
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