如何减小mono生成的静态库和动态库
起因
在前面 链接mono静态库,执行c#程序 ,编译mono生成的静态库比较大,用strip工具去除的调试符号.这里说说为什么mono生成的静态库和动态库比较大呢? 是因为执行autogen.sh生成configure,关于gcc 参数中有-g(调试信息).

该如何生成不带调试的静态库和动态库呢?
先认识mono的configure都有哪些参数呢? 先进入mono源码目录中,找到configure文件,如果没有的话,先执行autogen.sh,这个可以参考 链接mono静态库,执行c#程序在mingw64.exe,进入mono源码的目录中.
#查看configure 参数项
./configure --help
参数很多,这里只截取最后一部分,也是我们要用其中的两个.
在其中的参数发现,可以看到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下.
这样就不需要手动用strip工具.生成exe大小是能接受的.
秋风
2019-08-11