《C++ Primer》
要运行一个最简单的C++程序,按照书上的代码写完
int main() { reutrn 0; }
保存为test1.cc
根据书上命令, windows下用cl.exe进行编译,那个l是小写的L,应该是compile + link的意思,当年学C的时候,这两个命令是分开的。
本书作者给出的Windows下的C++编译器是VS2010的。
首先要确保已经安装的C++的开发环境,我安装的是VS2017版的C++。
cl.exe在D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64
为了方便调用,可以把这个路径加入到系统环境变量path。
打开CMD,进入我写的代码目录,执行cl test1.cc,分多次报以下错误:
LINK : fatal error LNK1104: 无法打开文件“LIBCMT.lib”
LINK : fatal error LNK1104: 无法打开文件“oldnames.lib”
LINK : fatal error LNK1104: 无法打开文件“kernel32.lib”
LINK : fatal error LNK1104: 无法打开文件“libvcruntime.lib”
LINK : fatal error LNK1104: 无法打开文件“libucrt.lib”
LINK : fatal error LNK1104: 无法打开文件“Uuid.lib”
网上找到的都是以VS项目为基础的设置。
我还没有在VS中建立项目,只是调用一下编译器,此路不通。
其实和C一样,只要把这些文件复制到代码目录就可以了。
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\lib\x64\oldnames.lib D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\lib\x64\libcmt.lib C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x64\kernel32.lib D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\lib\x64\libvcruntime.lib C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x64\libucrt.lib C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x64\Uuid.Lib
说来也奇怪,把这些路径加入到Path中,并没有效果,依然是找不到,看来编译器并没有读取path设置
复制到我的程序所在目录以后,编译就通过了。但此时的目录大小已达到71m
堂堂C++程序,不到1k,环境需要71M,有点搞笑了,目前还不知道是哪里的问题。
约半小时以后
现在知道问题出在哪里了。
问题出在,设置环境变量的时候,不能把那些路径加到path中去,而是要增加一个单独命名的变量,叫Lib,只能这三个字母,其它名字不行,大小写不敏感。
这样加了以后,就不必把那些文件复制到代码目录下了。
据我分析,如果用VS编译,这些动作会由VS自动完成,现在我用命令行,所以只能由我手动完成。留下一个悬念,以后用VS编译项目的时候,做一个测试进行验证。