mkbundleで簡単なC#アプリケーションをコンパイルすることはできません

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

  •  11-10-2019
  •  | 
  •  

質問

コンソール「Hello World」のようなアプリをいくつか書きました。そして、続いています C#Cywgwin Mono MkbundleWindows7-ファイルをコンパイルできない 答え。しかし、私は持っています:

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

Windows XPにあります。

役に立ちましたか?

解決

まず第一に、開発環境を準備します。

  1. Monoをインストールします。たとえば、あなたはそれをにインストールしました」C:\Soft\Mono".
  2. Cygwinをインストールします。 [パッケージをインストールするパッケージを選択する場合:gcc-mingw、mingw-zlib、pkg-config、nanoを選択します。
  3. Cygwin Bash Shellを開始します(リンクを使用するか」bash --login -i" 指図)。
  4. 開ける "$HOME/.bashrc"nano"で( "nano ~/.bashrc")。末端s(" cr "、" lf "、" cr/lf "など)を保存しない編集者を使用しないでください。そうしないと、ファイルが破損します!
  5. ファイルの最後に次の行を追加します。

    export PKG_CONFIG_PATH=/cygdrive/c/Soft/Mono/lib/pkgconfig
    export PATH=$PATH:/cygdrive/c/Soft/Mono/bin
    
  6. Cygwin Bashシェルを再起動します。

その後、「mkbundle」でアセンブリをコンパイルできます。

  1. 次のコマンドを実行します。」mkbundle -c -o host.c -oo bundle.o --deps YourAssembly.exe <additional arguments>「。あなたもオプションで合格するかもしれません」-z「結果のバンドルを圧縮するには、「host.c」と「bundle.o」ファイルを取得する必要があります。
  2. 「host.c」では、 "_win32" "branch"を削除する必要があります(除く」#include <windows.h>「1つ)。それは機能しません。追加するだけでそれを行うことができます」#undef _WIN32「それに続く直後:

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

    だからあなたは得る:

    #ifdef _WIN32
    #include <windows.h>
    #endif
    #undef _WIN32
    
  3. 次のコマンドを実行します。」gcc -mno-cygwin -o ResultantBundle.exe -Wall host.c `pkg-config --cflags --libs mono-2|dos2unix` bundle.o <additional arguments>"。ステップ2に-Zの追加引数を追加した場合、このステップに-LZ追加引数を追加する必要があります。

  4. 「resultantbundle.exe」が表示されます。これは、スタンドアロン実行可能ファイルとして詰め込まれたモノアプリケーションです。
  5. 「mono-2.0.dll」と、開発中に依存していた追加のDLL-Sとリソースが必要です(たとえば、GTK#ネイティブDLL-Sが必要になる場合があります)が、実行するには完全なモノランタイムは必要ありません。

他のヒント

-Zをmkbundleに渡すと、-lzをgccに渡す必要があることを追加したかっただけです。 WinformsとNet Accessを備えたアプリケーションを取得するにはいくつかの問題がありました。C: Mono etc Mono 4.0 Machine.configからMachine.configをコピーする必要がありました。その後、-machine-config machine.configをmkbundleに渡しました。

これらの手順はすべて、かなり混乱していてイライラしています。なぜMkBundleを入力するだけではないのか-deps app.exe? Mkbundleが使用しているテンプレートに変更を加えて、自分でコンパイルしようとしましたが、実行されません。私はモノソースをダウンロードし、全体を構築しようとすることを試みるために今まで行ってきましたが、それがうまくいくとは思いません。これを非常に迷惑にするために、Mkbundleで何が起こっているのかを誰かが説明できるなら、私は貢献することに興味があります。

Temp.OとTemp.Cを持っていると、Visual C ++にそれらを追加して、他のソースでWindowsアプリケーションを作成できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top