après avoir utilisé mkbundle2, machine de destination ne peut pas trouver libmono.0.dylib

StackOverflow https://stackoverflow.com/questions/3413346

  •  26-09-2019
  •  | 
  •  

Question

J'ai une application .NET de ligne de commande très simple que je veux port OS X.
Je peux courir avec
« de app.exe mono » Cependant, les machines de destination n'ont installé mono. Je voulais donc regrouper mono à l'intérieur de l'application.

Pour ce faire, j'utilisé mkbundle2:

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

Cela fonctionne sans erreur, sortie:

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

Je peux exécuter ce sur la machine de construction. Quand j'Executer sur une machine sans mono cependant, il ne fonctionnera pas.

Sortie:

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

Qu'est-ce que je manque? Comment puis-je inclure le moteur d'exécution mono réelle?

EDIT: J'ai aussi essayé d'ajouter le drapeau --static. Cela donne mon application une autre licence cependant, que je ne suis pas sûr que je veux. Je ne puis plus se plaint de libmono, mais à propos de libgthread-2.0.0.dylib

Était-ce utile?

La solution

Alors, le problème est que les liens mkbundle à certains fichiers qui résident sur mon mac, où je m'y attendais à les regrouper. Vous pouvez clairement voir qu'en regardant les ressources liées à la commande:

otool -L ./BundledApp

(où bundledApp est la sortie du mkbundle2)

Pour résoudre ce problème, je me suis retrouvé à l'aide des mkbundle Nant-tâches du projet monobjc:
http://www.monobjc.net/index.php?page=mkbundle- tâche

Je pense qu'ils sont à peu près une version automatisée de ce que je trouve ici:
http://code.google.com/p/cocoa-sharp- dev / wiki / RedistributableAppWithoutInstallingMono
Mais cela m'a donné des exceptions.

La tâche nante Monobjc fonctionne sans aucun problème, et est de loin la solution la plus simple. J'ai encore plusieurs fichiers, mais c'est ok, au moins cela fonctionne maintenant.

Autres conseils

Essayez de lancer:

  

mkbundle -o bundledappname program.exe   --deps

(utiliser un nom différent pour le faisceau plutôt que la même chose que votre program.exe et ne mettez pas l'extension .exe au -o)

De plus, avez-vous essayé macpack ?

Pour plus d'informations sur la façon de créer des groupes lire et le manuel amende de mkbundle

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top