0 . 起因
静态编译Qt 然后静态链接Qt时遇到很多问题,发现如果对编译过程更加熟悉一点的话,原本的困惑似乎会少很多,于是开始了解。
1 . 编译环境:
安装了Microsoft Visual C++ Compiler for Python 2.7(这个cl跟vs2008的版本相当),这里可以选择在安装目录本地练习操作,不过我为了之后上传github形成以后能用的编译包,将之组织到本地。
从如下安装目录借来bin include 和 lib 文件夹:
C:\Users\cn_pengs\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC
从如下安装目录借来 WinSDK文件夹:
C:\Users\cn_pengs\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0
组织文件到本地,目录结构为:
└───bin
└───include
└───lib
└───WinSDK
└───build_cl.bat
└───main.c
2 . 编辑main.c
#include <stdio.h>
int main(int argc,char* argv[])
{
printf("This is a test program\r\n");
return 0;
}
3 . 修改和测试build_cl.bat
3.1 . 测试1,直接编译
@echo off
rem build main.c
.\bin\cl.exe main.c
测试结果:
main.c(1): fatal error C1034: stdio.h: no include path set
3.2 . 测试2,加入-I ,包含include目录
@echo off
rem build main.c
.\bin\cl.exe main.c /I ./include
测试结果:
LINK : fatal error LNK1104: cannot open file ‘LIBCMT.lib’
3.3 . 测试3,加入/link ,包含include目录
@echo on
rem build main.c
.\bin\cl.exe main.c /I ./include /link ./lib/libcmt.lib ./lib/OLDNAMES.lib ./WinSDK\Lib\Kernel32.Lib
测试结果:
成功编译
运行结果:
C:\Users\cn_pengs\Desktop\build_cl>main
This is a test program
代码我放到了这里:
https://github.com/songpeng22/build_cl
参考文献:
https://blog.csdn.net/faithzzf/article/details/52328353