después de usar mkbundle2, la máquina de destino no puede encontrar libmono.0.dylib

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

  •  26-09-2019
  •  | 
  •  

Pregunta

Tengo una aplicación de línea de comandos .NET muy simple que quiero migrar a OS X.
Puedo ejecutarlo con "mono app.exe"
Sin embargo, las máquinas de destino no tendrán mono instalado.Entonces, quería incluir mono dentro de la aplicación.

Para hacer esto, usé mkbundle2:

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

Esto funciona sin errores, salida:

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

Puedo ejecutar esto en la máquina de compilación.Sin embargo, cuando ejecuto en una máquina sin mono, no se ejecutará.

Producción:

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é me estoy perdiendo?¿Cómo incluyo el tiempo de ejecución mono real?

EDITAR:También intenté agregar el indicador --static.Sin embargo, eso le da a mi aplicación otra licencia, que no estoy seguro de querer.Entonces ya no me quejo de libmono, sino de libgthread-2.0.0.dylib

¿Fue útil?

Solución

Entonces, el problema es que mkbundle se vincula a algún archivo que reside en mi Mac, donde esperaba que los agrupara.Puedes verlo claramente buscando los recursos vinculados con el comando:

otool -L ./BundledApp

(donde BundledApp es la salida de mkbundle2)

Para solucionarlo, terminé usando mkbundle nant-tasks del proyecto monobjc:
http://www.monobjc.net/index.php?page=mkbundle-task

Creo que son prácticamente una versión automatizada de lo que encontré aquí:
http://code.google.com/p/cocoa-sharp-dev/wiki/RedistributableAppWithoutInstallingMono
Pero eso me dio excepciones.

La tarea Monobjc nant funciona sin problemas y es, con diferencia, la solución más sencilla.Todavía tengo varios archivos pero está bien, al menos ahora funciona.

Otros consejos

Trate de ejecutar:

  

mkbundle -o bundledappname program.exe   --deps

(utilizar un nombre diferente para el paquete en lugar de la misma que su program.exe y no poner extensión .exe a la bandera -o)

Además, no se trató macpack ?

Para obtener más información sobre cómo crear paquetes de leer aquí y el manual de multa de mkbundle

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top