2

Windowsでlibmonoを静的ライブラリとしてコンパイルしたい。

ターゲットプラットフォームはWindowsx86です。ビルド環境:Windows 7 64ビット、VC ++ Express 2010

私がすでにしたこと。

1)モノラル2.10.8ソースをダウンロードしました。
2)msvcフォルダーからmono.slnを開き、すべてがコンパイルされていることを確認しました。
3)次に、いくつかの変更を加えました
。3.1)一般->プロジェクトのデフォルト->構成タイプ:静的ライブラリ(.lib)
3.2)一般->プロジェクトのデフォルト-> MFCの使用:標準のWindowsライブラリを使用
3.3)C / C ++ ->コード生成->ランタイムライブラリ:マルチスレッド(/ MT)
4)ビルドしてVC ++ 2010でmono-2.0.libを正常に作成
5)自分のプロジェクトのリンカー入力に追加(monoを埋め込みたい)使用:
5.1)一般->プロジェクトのデフォルト->構成タイプ:アプリケーション(.exe)
5.2)一般->プロジェクトのデフォルト-> MFCの使用:静的ライブラリでMFCを使用
5.3)C /C++->コード生成->ランタイムとしょうかん:

ほぼ完璧に機能しているようですが、いくつかのひどい問題があります。Dictionary<TKey、TSource>の不思議な振る舞い

すべてが正しく行われていますか?他のコンパイラオプションまたはプリプロセッサディレクティブを指定する必要がありますか?

PS: libmonoコマンドラインは次のとおりです。

/ I ".. \ libgc \ include" / I ".. \" / I ".. \ mono \" / I ".. \ mono \ jit" / I ".. \ mono \ eglib \ src" / I ".... \ mono \ eglib \ src" / I ".. \ eglib \ src" / Zi / nologo / W1 / WX- / O1 / Ob1 / Oi / Oy- / D "NDEBUG" / D " i386 " / D "TARGET_X86" / D "i386" / D "WIN32" / D "_WIN32" / D " WIN32 " / D "_WINDOWS" / D "WINDOWS" / D "HOST_WIN32" / D "TARGET_WIN32" / D "_CRT_SECURE_NO_DEPRECATE" / D "GC_NOT_DLL" / D "HAVE_CONFIG_H" / D "WINVER = 0x0500" / D "_WIN32_WINNT = 0x0500" / D "_WIN32_IE = 0x0501" / D "WIN32_THREADS" / D "FD_SETSIZE = 1024" / D " default_codegen"/ D" MONO_ASSEMBLIES = 0 "/ D" _UNICODE "/ D" UNICODE "/ GF / Gm- / EHsc / MT / GS / Gy / fp:precise / Zc:wchar_t / Zc:forScope/Fp"。\Release/ libmono.pch "/ Fa" Win32 \ obj \ libmono \ "/ Fo" Win32 \ obj \ libmono \ "/ Fd" Win32 \ obj \ libmono \ vc100.pdb "/ Gd / TC / analysis- / errorReport:queue

UPD:

私の質問に関連するこのディスカッションを見つけましたhttp://mono.1490590.n4.nabble.com/Mono-static-library-td3546774.html

それはまだ実際ですか?Boehmの代わりにSGenを使用できますか?はいの場合、ヒントをいただければ幸いです。はいの場合、sgenを使用して静的ライブラリとしてmonoを使用できますか?

4

2 に答える 2

4

XY の問題が疑われるため、質問の詳細はスキップします。

mono ランタイムに静的にリンクされたアプリケーションを作成する場合は、次を使用しますmkbundle.exe

 mcs Main.cs
 mkbundle --static --deps -z Main.exe -o Main
 ldd Main

結果は

sehe@mint12:~/Projects/SODemo/SODemo$ mkbundle --static --deps -z Main.exe -o Main
OS is: Linux
Note that statically linking the LGPL Mono runtime has more licensing restrictions than dynamically linking.
See http://www.mono-project.com/Licensing for details on licensing.
Sources: 1 Auto-dependencies: True
   embedding: /home/sehe/Projects/SODemo/SODemo/Main.exe
   compression ratio: 44,62%
   embedding: /usr/lib/mono/4.0/mscorlib.dll
   compression ratio: 34,99%
   embedding: /usr/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll
   compression ratio: 37,49%
   embedding: /usr/lib/mono/gac/Mono.Security/4.0.0.0__0738eb9f132ed756/Mono.Security.dll
   compression ratio: 40,12%
   embedding: /usr/lib/mono/gac/System.Configuration/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
   compression ratio: 40,12%
   embedding: /usr/lib/mono/gac/System.Xml/4.0.0.0__b77a5c561934e089/System.Xml.dll
   compression ratio: 34,06%
   embedding: /usr/lib/mono/gac/System.Security/4.0.0.0__b03f5f7f11d50a3a/System.Security.dll
   compression ratio: 39,32%
   embedding: /usr/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll
   compression ratio: 34,16%
   embedding: /usr/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll
   compression ratio: 40,01%
Compiling:
as -o temp.o temp.s 
cc -o Main -Wall `pkg-config --cflags mono-2` temp.c -lz `pkg-config --libs-only-L mono-2` -Wl,-Bstatic -lmono-2.0 -Wl,-Bdynamic `pkg-config --libs-only-l mono-2 | sed -e "s/\-lmono-2.0 //"` temp.o
Done
sehe@mint12:~/Projects/SODemo/SODemo$ ldd Main
    linux-vdso.so.1 =>  (0x00007fff7b1ff000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007ffe95d0f000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ffe95a8b000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007ffe95882000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ffe9567e000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ffe95461000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffe950bf000)
    /lib64/ld-linux-x86-64.so.2 (0x00007ffe95f52000)

結果として得られる実行可能ファイルのサイズは、単純なプログラムで 5.8Mb であることに注意してください。しかし、それ完全に独立しています。

こちらもご覧ください

于 2012-05-23T12:59:41.313 に答える
2

今、私にはすべてが明らかです。

Hans Passant は、静的リンクが機能しないことを示すDictionary<TKey, TSource> の不思議な動作に対する回答を提供しました。

この質問への回答は、別の GC を選択する可能性がまだないことを示しています: Compiling Mono from Visual Studio with sgen support

要約すると、今日の Windows での唯一の解決策は動的リンクであることが理解されています。

于 2012-05-23T14:09:06.400 に答える