我目前正在移植一个库(不是我自己写的,我只是“移植它)使用MinGW编译器。该库是一个真正的重量级,具有各种C++“黑魔法”(多重继承,模板模板模板,非常宏重等)。MinGW二进制3x大小与MSVC二进制
现在,过了几个星期,我得到的一切都很好地编译,它也似乎很好地工作(单元测试工作,以及演示)。
但是,我发现的错误是MinGW二进制文件的大小与MSVC二进制文件相反。我知道MinGW二进制文件通常要稍微大一点,因为它们必须包含自己的非MS系统库,但我们谈论的是MinGW为33 MB,MSVC为13 MB。 这就是“释放”(-O3和-s标志)版本!
这些都是我的MinGW进行编译标志:
-c -O3 -s -MMD -march=native -frtti
和链接器是这样的:
-shared -s -static-libgcc -static-libstdc++
我知道,RTTI增加了一些大小,但它也必须是在MSVC二进制文件中。而静态libgcc和libstdC++库不能那么大......或者他们可以吗?
我在这里错过了什么?通常情况下,MinGW和MSVC之间的尺寸差异不是即大。
首先,我们的存储库关心。 ;)特别是当我不得不重新上传这个库多次时,我是否应该改变库中的某些东西(我无法上传源代码,只是将二进制文件上传到我们自己的回购库中)。我会尝试你建议的标志。看看是否有区别。 – TheSHEEEP
静态链接到MSVC是什么意思?静态链接什么?我正在创建一个动态库和两个。或者你的意思是运行时?如果是这样,我认为MSVC的C++运行时不是〜20MB大,是吗? – TheSHEEEP
在GCC的情况下,您正在静态链接libgcc和libstdC++,这是一大堆代码。如果你在MSVC的情况下没有这样做(我甚至不确定你是否可以),比较文件大小是没有意义的。如果不静态链接GCC运行时库,会发生什么情况? – rubenvb