dopo aver usato mkbundle2, macchina di destinazione non riesce a trovare libmono.0.dylib

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

  •  26-09-2019
  •  | 
  •  

Domanda

Ho un'applicazione molto semplice riga di comando NET che voglio porta per OS X.
Posso eseguirlo con "mono app.exe"
Tuttavia, le macchine di destinazione non avranno mono installato. Così, ho voluto riunire mono dentro l'applicazione.

Per fare questo, ho usato mkbundle2:

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

Questo funziona senza errori, in uscita:

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

posso eseguire questo sul sistema di compilazione. Quando mi girano su una macchina senza mono tuttavia, non verrà eseguito.

Output:

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

Che cosa mi manca? Come faccio a includere l'attuale mono runtime?

EDIT: Ho anche provato ad aggiungere il flag --static. Che dà la mia app un'altra licenza però, che io non sono sicuro di volerlo. Ho poi non si lamenta libmono, ma di libgthread-2.0.0.dylib

È stato utile?

Soluzione

Quindi, il problema è che i collegamenti mkbundle a qualche file che risiedono sul mio Mac, dove mi aspettavo che per impacchettare loro. Si può chiaramente vedere che, cercando le risorse collegate con il comando:

otool -L ./BundledApp

(dove bundledApp è l'uscita del mkbundle2)

Al fine di risolvere il problema, ho finito per usare le Nant-compiti mkbundle dal progetto monobjc:
http://www.monobjc.net/index.php?page=mkbundle- compito

Penso che siano più o meno una versione automatizzata di quello che ho trovato qui:
http://code.google.com/p/cocoa-sharp- dev / wiki / RedistributableAppWithoutInstallingMono
Ma che mi ha dato le eccezioni.

Il compito Nant Monobjc funziona senza problemi, ed è di gran lunga la soluzione più semplice. Ho ancora più file ma va bene così, almeno funziona ora.

Altri suggerimenti

Provare a eseguire:

  

mkbundle -o bundledappname program.exe   --deps

(utilizzare un nome diverso per il pacchetto, piuttosto che lo stesso del vostro program.exe e non mettere estensione .exe alla bandiera -o)

Inoltre, hai provato macpack ?

Per ulteriori informazioni su come creare fasci di leggere qui e la fine manuale di mkbundle

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top