Domanda

ho scritto un po 'di console "Ciao mondo" app-simili. e hanno seguito c # cywgwin mono mkbundle windows 7 - non è possibile rispondere in fase di compilazione . Ma ho avuto:

$ mkbundle -o Fur Furries.exe --deps -z
OS is: Windows
Sources: 1 Auto-dependencies: True
  embedding: C:\Monotest\Furries.exe
  compression ratio: 40.43%
  embedding: C:\Soft\Mono\lib\mono\4.0\mscorlib.dll
  compression ratio: 34.68%
Compiling:
as -o temp.o temp.s
gcc -mno-cygwin -g -o Fur -Wall temp.c `pkg-config --cflags --libs mono-2|dos2un
ix` -lz temp.o
temp.c: In function `main':
temp.c:173: warning: implicit declaration of function `g_utf16_to_utf8'
temp.c:173: warning: assignment makes pointer from integer without a cast
temp.c:188: warning: assignment makes pointer from integer without a cast
/tmp/ccQwnxrF.o: In function `main':
/cygdrive/c/Monotest/temp.c:173: undefined reference to `_g_utf16_to_utf8'
/cygdrive/c/Monotest/temp.c:188: undefined reference to `_g_utf16_to_utf8'
collect2: ld returned 1 exit status
[Fail]

E 'in Windows XP.

È stato utile?

Soluzione

Prima di tutto, preparare l'ambiente di sviluppo:

  1. Installa Mono. Ad esempio, è stato installato in "C:\Soft\Mono".
  2. Installa Cygwin. Quando si seleziona quali pacchetti installare selezionare le seguenti:. Gcc-mingw, mingw-zlib, pkg-config, nano
  3. Avvia Cygwin shell Bash (o utilizzando un collegamento o comando "bash --login -i").
  4. Apri "$HOME/.bashrc" con "nano" ( "nano ~/.bashrc"). Non usare gli editor che non conserva end-of-line-s ( "CR", "LF", "CR / LF" o altro), o lo farà corrompere il file!
  5. Aggiungi le righe seguenti alla fine del file:

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

Dopo di che è possibile compilare gli assembly con "mkbundle":

  1. Eseguire il seguente comando: "mkbundle -c -o host.c -oo bundle.o --deps YourAssembly.exe <additional arguments>". È anche possibile opzionalmente passare "-z" per comprimere fascio risultante. Si dovrebbe ottenere i file "bundle.o" "host.c" e.
  2. In "host.c" si dovrebbe rimuovere "_WIN32" "branch" (ad eccezione di "uno #include <windows.h>"). Non funziona. Si può farlo solo con l'aggiunta di "#undef _WIN32" a destra dopo aver seguito le linee in esso:

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

    Quindi, si otterrà:

    #ifdef _WIN32
    #include <windows.h>
    #endif
    #undef _WIN32
    
  3. Eseguire il seguente comando: "gcc -mno-cygwin -o ResultantBundle.exe -Wall host.c `pkg-config --cflags --libs mono-2|dos2unix` bundle.o <additional arguments>". Se è stato aggiunto un ulteriore argomento -z al punto 2, è necessario aggiungere un ulteriore argomento -lz in questo passaggio.

  4. Otterrete "ResultantBundle.exe". Questa è la vostra applicazione Mono imballato come eseguibile standalone.
  5. Si richiede ancora "mono-2.0.dll" e alcune ulteriori DLL-s e risorse che dipendeva durante lo sviluppo (ad esempio, può richiedere GTK # nativa DLL-s), ma non richiede piena runtime Mono per run.

Altri suggerimenti

Volevo solo aggiungere che se si passa a z mkbundle allora avrete bisogno di passare -lz a gcc. Ho avuto alcuni problemi ottenere un'applicazione con WinForms e accesso alla rete per funzionare correttamente, e ho dovuto copiare machine.config da C: \ Mono \ etc \ mono \ 4.0 \ machine.config al punto in cui la mia domanda era. Poi ho passato --machine-config machine.config a mkbundle.

Tutti questi passaggi sono piuttosto confuso e frustrante, perché non è così semplice come la tipizzazione mkbundle --deps app.exe? Ho provato a fare una modifica al modello utilizzato da mkbundle e compilando io stesso, ma non lo corro. Sono andato per quanto ora come scaricare il sorgente mono e tentare di costruire il tutto, ma dubito che funzionerà. Se qualcuno può spiegare che cosa diavolo sta succedendo con mkbundle per rendere questo così fastidioso, sarei interessato a contribuire.

Dopo la temp.o e temp.c, è possibile aggiungerli al visual c ++ di presentare una domanda di Windows con altre fonti.

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