《C++ Primer》

要运行一个最简单的C++程序,按照书上的代码写完

int main()

{

  reutrn 0;

}

保存为test1.cc

根据书上命令, windows下用cl.exe进行编译,那个l是小写的L,应该是compile + link的意思,当年学C的时候,这两个命令是分开的。

首先要确保已经安装的C++的开发环境,我安装的是VS2017版的C++。

cl.exe在D:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.16.27023inHostx64x64

为了方便调用,可以把这个路径加入到系统环境变量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 Studio2017CommunityVCToolsMSVC14.16.27023libx64oldnames.lib
D:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.16.27023libx64libcmt.lib
C:Program Files (x86)Windows Kits10Lib10.0.17763.0umx64kernel32.lib
D:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.16.27023libx64libvcruntime.lib
C:Program Files (x86)Windows Kits10Lib10.0.10240.0ucrtx64libucrt.lib
C:Program Files (x86)Windows Kits10Lib10.0.17763.0umx64Uuid.Lib

说来也奇怪,把这些路径加入到Path中,并没有效果,依然是找不到,看来编译器并没有读取path设置

复制到我的程序所在目录以后,编译就通过了。但此时的目录大小已达到71m

堂堂C++程序,不到1k,环境需要71M,有点搞笑了,目前还不知道是哪里的问题。

约半小时以后

现在知道问题出在哪里了。

问题出在,设置环境变量的时候,不能把那些路径加到path中去,而是要增加一个单独命名的变量,叫Lib,只能这三个字母,其它名字不行,大小写不敏感。

这样加了以后,就不必把那些文件复制到代码目录下了。

据我分析,如果用VS编译,这些动作会由VS自动完成,现在我用命令行,所以只能由我手动完成。留下一个悬念,以后用VS编译项目的时候,做一个测试进行验证。

原文地址:https://www.cnblogs.com/Sabre/p/14254560.html