MinGW编译单个C文件
作者:罗上文,微信:Loken1,公众号:FFmpeg弦外之音
在 MinGW 目录下创建一个 项目 projects/c-single ,还是以 hello.c 演示一下 gcc 的用法。

使用以下命令编译 hello.c
cd C:\MinGW\bin
.\gcc.exe -c -o C:\MinGW\projects\c-single\hello.o C:\MinGW\projects\c-single\hello.c
初学者我不建议你 配置 MinGW的bin目录为环境变量,因为会影响文章后面的 MSYS2 的环境。
然后再链接 hello.o 为 exe 文件,如下:
.\gcc.exe -o C:\MinGW\projects\c-single\hello.exe C:\MinGW\projects\c-single\hello.o
运行结果如下:

再用 dumpbin 查看一下这个 hello.exe 的依赖,如下:
dumpbin /DEPENDENTS C:\MinGW\projects\c-single\hello.exe

从上图可以看出,MinGW 的 gcc 编译出来的 exe 非常 Windows 原生,跟 cl.exe 简直一模一样。
之前提到 hello.o 实际上跟 hello.obj 是类似的,那可不可以直接用 link.exe 来把 hello.o 链接成 exe 呢?试一下。
cd C:\MinGW\projects\c-single\
link.exe /DEBUG /OUT:hello.exe hello.o

可以看到,报错了。
因此 MinGW 跟 MSVC 的编译器 、链接器不要交叉使用。虽然 .o 跟 .obj 文件格式一样,但是内部的内容,还是有点区别的。因为他们的链接器需要不同的内容。