我想在Windows中编译libmono作为静态库。
目标平台是Windows 86。 构建环境:Windows 7 64位,VC ++快讯2010年
我已经做了。
1)下载单2.10.8源。
2)打开mono.sln从MSVC文件夹,并确保一切都compilling。
3)然后我做了一些变化:
3.1)通用>项目Defaults->配置类型:静态库(.LIB)
3.2)常规 - > MFC项目Defaults->使用:使用标准的Windows库
3.3)C / C ++ - >代码发生 - >运行时库:多线程(/ MT)
4)内置它和VC ++ 2010成功创建单2.0.lib
5)增加了它在我自己的项目中连接器的输入(即我想嵌入单声道):
5.1)通用>项目Defaults->配置类型:Application(.EXE)
5.2)常规 - >项目Defaults->使用MFC的:使用MFC的Ststic库
5.3)C / C ++ - >代码发生 - >运行时库:多线程(/ MT)
看来近乎完美的,但有一些可怕的问题需要解决: 词典的神秘行为<TKEY的,TSource>
一切都做正确吗? 我应该指定任何其他编译器选项或预处理指令?
PS:libmono命令行是:
/I"..\libgc\include “/ I” .. \ “/ I” .. \单声道\ “/I"..\mono\jit” /I"..\mono\eglib\src” / I “.... \单\ eglib \ SRC” /I"..\eglib\src” /紫/ 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 /格雷/ FP:精确/ 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 / analyze- / errorReport:队列
UPD:
我发现这个讨论这是关系到我的问题http://mono.1490590.n4.nabble.com/Mono-static-library-td3546774.html
它仍然是实际? 我可以使用SGEN代替贝姆? 如果是的话,任何提示是非常赞赏。 如果是,我可以再使用单声道与使用SGEN的静态库?
我要去,因为我怀疑是跳过你的问题的细节XY问题 。
如果你想创建一个静态链接到单运行的应用程序,只需使用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。 但它是完全独立的。
也可以看看
现在一切都清楚了我。
汉斯帕桑特给了一个答案, 词典的神秘行为<TKEY的,TSource>这表明,静态链接将无法正常工作。
这个问题的答案表明,有没有可能选择其他GC尚未: 编译单从Visual Studio中查看sgen支持
总之,它的了解,nowdays在Windows上唯一的解决办法是在动态链接