Frage

Ich habe einige Konsole „Hallo Welt“ -ähnlichen App geschrieben. und gefolgt c # cywgwin mono mkbundle windows 7 - kann nicht Kompilierung Datei Antwort. Aber ich habe bekam:

$ 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]

Es ist in Windows XP.

War es hilfreich?

Lösung

Zu allererst Entwicklungsumgebung vor:

  1. Installieren Mono. Zum Beispiel haben Sie es in „C:\Soft\Mono“ installiert.
  2. Install Cygwin. Bei der Auswahl der Pakete, die wählen Sie Folgendes installieren:. Gcc-mingw, mingw-zlib, pkg-config, nano
  3. Start Cygwin Bash-Shell (entweder einen Link oder "bash --login -i" Befehl).
  4. Öffnen "$HOME/.bashrc" mit "nano" ( "nano ~/.bashrc"). Nicht-Editoren verwenden, die nicht end-of-line-s ( "CR", "LF", "CR / LF" oder andere) erhalten, oder es wird die Datei beschädigt!
  5. Fügen Sie folgende Zeilen am Ende der Datei ein:

    export PKG_CONFIG_PATH=/cygdrive/c/Soft/Mono/lib/pkgconfig
    export PATH=$PATH:/cygdrive/c/Soft/Mono/bin
    
  6. Starten Sie Cygwin Bash-Shell.

Danach können Sie Ihre Baugruppen mit "mkbundle" zusammenstellen können:

  1. Führen Sie den folgenden Befehl ein: "mkbundle -c -o host.c -oo bundle.o --deps YourAssembly.exe <additional arguments>". Sie können auch optional „-z“ zu komprimieren resultierende Bündel passieren. Sie sollten "host.c" und "bundle.o" Dateien.
  2. In "host.c" sollten Sie "_WIN32" "Zweig" (mit Ausnahme von "#include <windows.h>" one) entfernen. Es funktioniert nicht. Sie können es tun, nur durch „#undef _WIN32“ direkt nach folgenden Zeilen in es fügt hinzu:

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

    So Sie erhalten:

    #ifdef _WIN32
    #include <windows.h>
    #endif
    #undef _WIN32
    
  3. Führen Sie den folgenden Befehl ein: "gcc -mno-cygwin -o ResultantBundle.exe -Wall host.c `pkg-config --cflags --libs mono-2|dos2unix` bundle.o <additional arguments>". Wenn Sie ein zusätzliches Argument -z in Schritt 2 hinzugefügt haben, müssen Sie ein lz zusätzliches Argument in diesem Schritt hinzuzufügen.

  4. Sie erhalten "ResultantBundle.exe". Das ist Ihre Mono-Anwendung als eigenständige ausführbare Datei verpackt.
  5. Es bedarf noch der „Mono-2.0.dll“ und einige zusätzliche DLL-s und Ressourcen, die Sie während der Entwicklung hing von (zum Beispiel kann es GTK # nativen DLL-s benötigen), aber es erfordert keine volle Mono-Laufzeit Lauf.

Andere Tipps

Ich wollte nur hinzufügen, dass, wenn Sie -z passieren mkbundle dann werden Sie lz zu gcc übergeben müssen. Ich hatte einige Probleme eine Anwendung mit WinForms und Netto-Zugang zu Arbeit richtig bekommen, und ich hatte machine.config von C zu kopieren: \ Mono \ etc \ Mono \ 4.0 \ machine.config, wo meine Anwendung war. Ich ging dann --machine-config machine.config mkbundle.

Alle diese Schritte sind ziemlich verwirrend und frustrierend, warum ist nicht so einfach wie nur Typisierung mkbundle --deps app.exe? Ich habe versucht, eine Änderung an der Vorlage von mkbundle verwendet machen und Kompilieren es selbst, aber es wird nicht laufen. Ich habe bis jetzt gegangen, wie die Mono-Quelle herunterladen und versuchen, die ganze Sache zu bauen, aber ich bezweifle es wird funktionieren. Wenn jemand kann erklären, was zum Teufel mit mkbundle wird dies so ärgerlich zu machen, würde ich als Beitrag interessiert sein.

, nachdem Sie den temp.o und temp.c haben, können Sie sie zu Visual C ++ hinzufügen, um eine Windows-Anwendung mit anderen Quellen zu machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top