如何减小mono生成的静态库和动态库

起因

在前面 链接mono静态库,执行c#程序 ,编译mono生成的静态库比较大,用strip工具去除的调试符号. 

这里说说为什么mono生成的静态库和动态库比较大呢? 是因为执行autogen.sh生成configure,关于gcc 参数中有-g(调试信息).
mono的configure有关参数

该如何生成不带调试的静态库和动态库呢?

先认识mono的configure都有哪些参数呢? 先进入mono源码目录中,找到configure文件,如果没有的话,先执行autogen.sh,这个可以参考  链接mono静态库,执行c#程序

在mingw64.exe,进入mono源码的目录中.
#查看configure 参数项
 ./configure --help

参数很多,这里只截取最后一部分,也是我们要用其中的两个.

mono的configure 帮助

在其中的参数发现,可以看到RISC-V和 .Net Core相关参数,也就是在Mono 6.0 开始支持RISC-V平台的CPU,也可以支持运行.Net Core的程序集.

回到正题,在看到上图中CFLAGS,说明CFLAGS是执行的.我们只要指定CFLAGS和CXXFLAGS这两个参数为-O2,这样configure在生成Makefile的时候,会以我们指定的参数覆盖默认的参数.

#来测试一下
./configure --prefix=/e/opensource/mymono/  --bindir=/e/opensource/mymono/mono/  --host=x86_64-w64-mingw32 --disable-boehm CFLAGS=-O2   CXXFLAGS=-O2

在编译之后,看mono/mini/.libs下.

在编译mono,去除-g后,生成的静态库大小

这样就不需要手动用strip工具.生成exe大小是能接受的.

秋风 2019-08-11