【发布时间】:2020-06-15 11:13:09
【问题描述】:
我在一个名为“hw.cpp”的文件中有以下简单的 C++ 程序:
#include <stdio.h>
int main(int argc, char* args[])
{
printf("Hello, world!\n");
return 0;
}
用 gcc 9.3.0 (Ubuntu) 编译,结果如下:
- gcc -g0 hw.cpp -o hw.out(禁用调试信息)=> 大小为 17k(如果删除了
-g0,则相同) - gcc -g3 hw.cpp -o hw.out(最大调试信息)=> 大小为 44k
但 MSVC(cl 版本 19.26.28806)的默认编译输出一个更大的文件:
- cl hw.cpp /link /out:hw.exe => 大小为 101k
为什么 MSVC 版本这么大?这与调试信息有关吗?如何禁用调试信息? cl.exe compiler options 与 gcc -gN 选项没有明显的等效项。
【问题讨论】:
-
这是一个 链接器 选项 (
/DEBUG:NONE)。见my other answer。在/link之后立即添加开关。 Documentation. -
@AdrianMole:谢谢,但命令
cl hw.cpp /link /DEBUG:NONE /out:hw.exe没有任何区别(大小仍为 101k)。语法对吗? -
语法看起来不错。我猜 MSVC 是在可执行文件中添加各种运行时库的东西。
-
@AlainD
gcc是否默认链接到您环境中的静态或共享/动态 CRT? -
@dxiv:嗯,我该如何检查这个?...对不起,Linux 新手!新安装 Ubuntu 20.04,然后运行类似
sudo apt install build-essential gcc g++ (etc)的命令。没有用 gcc 配置任何特定的东西。
标签: c++ visual-studio visual-studio-2019