Était-ce utile?

La solution

Tout d'abord, préparer l'environnement de développement:

  1. Installer Mono. Par exemple, vous avez installé dans « C:\Soft\Mono ».
  2. Installer Cygwin. Lors de la sélection des paquetages à installer select suivante:. Gcc-MinGW, MinGW-zlib, pkg-config, nano
  3. Démarrer le shell Cygwin Bash (soit en utilisant un lien ou commande "bash --login -i").
  4. Ouvrir "$HOME/.bashrc" avec "nano" ( "nano ~/.bashrc"). Ne pas utiliser les éditeurs qui ne conserve pas de fin de ligne s ( « CR », « LF », « CR / LF » ou autre), ou corrompre le fichier!
  5. Ajoutez les lignes suivantes à la fin du fichier:

    export PKG_CONFIG_PATH=/cygdrive/c/Soft/Mono/lib/pkgconfig
    export PATH=$PATH:/cygdrive/c/Soft/Mono/bin
    
  6. Restart Cygwin shell bash.

Après cela, vous pouvez compiler vos ensembles avec "mkbundle":

  1. Effectuer la commande suivante: "mkbundle -c -o host.c -oo bundle.o --deps YourAssembly.exe <additional arguments>". Vous pouvez passer en option également « -z » pour comprimer ensemble résultant. Vous devriez obtenir "host.c" et les fichiers "bundle.o".
  2. Dans "host.c", vous devez supprimer "_WIN32" "branche" (sauf "une #include <windows.h>"). Il ne fonctionne pas. Vous pouvez le faire en ajoutant simplement « #undef _WIN32 » juste après les lignes suivantes dans ce:

    #ifdef _WIN32
    #include <windows.h>
    #endif
    

    Vous obtiendrez:

    #ifdef _WIN32
    #include <windows.h>
    #endif
    #undef _WIN32
    
  3. Exécutez la commande suivante: "gcc -mno-cygwin -o ResultantBundle.exe -Wall host.c `pkg-config --cflags --libs mono-2|dos2unix` bundle.o <additional arguments>". Si vous avez ajouté un argument supplémentaire -Z à l'étape 2, vous devez ajouter un argument supplémentaire -lz dans cette étape.

  4. Vous obtiendrez "ResultantBundle.exe". Ceci est votre application Mono emballé comme exécutable autonome.
  5. Il faut encore « mono-2.0.dll » et une DLL-s et des ressources supplémentaires que vous dépendait au cours du développement (par exemple, il peut exiger GTK # DLL s native) mais il n'a pas besoin de temps d'exécution complète Mono run.

Autres conseils

Je voulais juste ajouter que si vous passez à -Z mkbundle alors vous aurez besoin de passer -lz à gcc. J'ai eu quelques problèmes pour trouver une application avec WinForms et l'accès au réseau pour fonctionner correctement, et je devais copier machine.config de C: \ Mono \ etc \ mono \ 4.0 \ machine.config à l'endroit où ma demande était. Je me suis alors passé --machine-config machine.config à mkbundle.

Toutes ces étapes sont assez confus et frustrant, pourquoi n'est pas aussi simple que taper mkbundle --deps app.exe? J'ai essayé de faire un changement au modèle utilisé par mkbundle et la compilation moi-même, mais il ne sera pas exécuté. Je suis allé jusqu'à maintenant télécharger la source mono et tentent de construire la chose, mais je doute que cela fonctionnera. Si quelqu'un peut expliquer ce que l'enfer va avec mkbundle pour faire de ce si ennuyeux, je serais intéressé à contribuer.

Une fois que vous avez la temp.o et temp.c, vous pouvez les ajouter à c ++ visuel pour faire une application Windows avec d'autres sources.

scroll top