如何在DOS下用C/C++ 编译器
本文来自CSDN博客
★★ 注意:以下适合 PC 环境 ★★
●C/C++ 编译器需要的环境变数设定
古早以来,PC 上的 C 编译器,就需要两个环境变数:
LIB:这个环境变数告诉编译器说,必要的 libraries 在哪里(哪个磁碟目录下)
INCLUDE:告诉编译器说,必要的 header files 在哪里(哪个磁碟目录下)
另外,为了让我们能够在任何 working directory 都叫得到编译器,当然我们必须设定 PATH。
从古早以来,一直到现在,C/C++ 编译器都需要这三个环境变数。
●以 Visual C++ 为例
以 Visual C++ 为例,如果安装後的档案布局如下:
C:\MSDEV\VC98\BIN : 这里放有编译器 CL.EXE
C:\MSDEV\VC98\INCLUDE : 这里放有 C/C++ header files
C:\MSDEV\VC98\LIB : 这里放有 C/C++ standard libraries
那麽你可以写一个批次档如下:
set PATH=C:\MSDEV\VC98\BIN;C:\MSDEV\COMMON\MSDEV98\BIN
set INCLUDE=C:\MSDEV\VC98\INCLUDE
set LIB=C:\MSDEV\VC98\LIB
之所以需要另外设定PATH=C:\MSDEV\COMMON\MSDEV98\BIN,是因为编译器 CL.EXE 执行时需要 MSPDB60.DLL,而它被安装於C:\MSDEV\COMMON\MSDEV98\BIN 之中。
如果你写的程式不只是单纯的 C/C++ 程式,还用到了 MFC,一样可以在 console mode 下编译,这时候你的环境变数应该如此设定:
set PATH=C:\MSDEV\VC98\BIN;C:\MSDEV\COMMON\MSDEV98\BIN
set INCLUDE=C:\MSDEV\VC98\INCLUDE;C:\MSDEV\VC98\MFC\INCLUDE
set LIB=C:\MSDEV\VC98\LIB;C:\MSDEV\VC98\MFC\LIB
多指定了 MFC\INCLUDE 和 MFC\LIB,就可以让编译器和联结器找到 MFC 的 header files 和 libraries。如果你还需要用到 ATL,就得在 INCLUDE 环境变数中再加上C:\MSDEV\VC98\ATL\INCLUDE。
●以 Borland C++Builder 为例
以 Borland C++Builder 为例,如果安装後的档案布局如下:
C:\BORLAND\CBuilder3\BIN : 这里放有编译器 BCC32.EXE
C:\BORLAND\CBuilder3\INCLUDE : 这里放有 C/C++ header files
C:\BORLAND\CBuilder3\LIB : 这里放有 C/C++ standard libraries
那麽你可以写一个批次档如下:
set PATH=C:\BORLAND\CBuilder3\BIN
set INCLUDE=C:\BORLAND\CBuilder3\INCLUDE
set LIB=C:\BORLAND\CBuilder3\LIB
●如何在 console 中编译 C/C++ 程式
首先,开启一个 DOS Box(DOS Prompt, DOS VM),然後在该 DOS box 中执行上述写好的批次档,完成环境变数的设定。你可以再在 DOS 提示号下键入 set 命令,看看环境变数的设定内容正确与否。
然後就可以直接在 DOS 提示号下键入编译器名称,开始编译了。如果你使用 Visual C++,就这麽做:
C:\> CL test.cpp <Enter>
如果你使用 C++Builder,就这麽做:
C:\> BCC32 test.cpp <Enter>
至於特殊情况下需要什麽特殊的 options,就必须自己查一下啦。只要执行 CL /? 或 BCC32(其後不加任何引数),便可看到所有的 compile options。
●编译器与联结器的关系
早期的编译过程与联结过程是分开的。换句话说我们必须做两个动作:
C:\> Cl test.cpp
C:\> LINK test.obj xxx (xxx 代表各个必要的 libraries)
或是:
C:\> BCC32 test.cpp
C:\> TLINK32 test.obj xxx (xxx 代表各个必要的 libraries)
如今的编译过程与联结过程当然还是分开的,但是我们的动作只需一个:
C:\> CL test.cpp
或是:
C:\> BCC32 test.cpp
这是因为编译器变聪明了,除非你指定 /c option(表示只编译不联结),否则它便自动为你呼叫联结器进行联结动作。过去以来颇令 programmer烦恼的「该使用哪些 libraries」的问题,编译器也有了聪明的解决方案:它将程式中用到的 library functions 记录起来,同时也录下它们所属的library 名称,於是联结器就可以从这个表格中知道要联结哪些 libraries 了。
●环境变数与 DOS VM(Virtual Machine)的关系
你可以同时开起多个 DOS Box,但是你不能够在某个 DOS Box 中执行上述批次档而在另一个 DOS VM 中享受其环境设定。
这是因为每个 DOS Box 都是一个 Virtual Machine,彼此谁也看不到谁,互不相干。
除非你在 autoexec.bat 中就设定好上述那些环境变数。这麽一来,任何一个新开启的 DOS VM 便会因为继承最原始的 DOS VM 环境,而继承了那些变数设定。
●环境空间(environment space)不足
最易造成大家困扰的,就是环境空间(environment space)不足的问题。
当你安装好 Visual C++,会在其 BIN 子目录中发现一个名为 VCVARS32.BAT 的档案。这个档案其实就是做上述的环境变数设定动作(这在 Visual C++ 安装过程的最後一个步骤有说明。哎,有多少人安装软体不看说明!)。所以,你可以在任何 DOS Box 中执行此档,取代前述我们自己的批次档。
但是通常大家都有失败的经验,得到 "Out of environment space" 的错误讯息。这是因为 VCVARS32.BAT 使用以下句法:
set INCLUDE=%MSVCDir%\ATL\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\MFC\INCLUDE;%INCLUDE%
set LIB=%MSVCDir%\LIB;%MSVCDir%\MFC\LIB;%LIB%
意思是把 INCLUDE 的原始设定(%INCLUDE%)再附加其他设定,并把LIB 的原始设定(%LIB%)再附加其他设定。如果原始设定已经很长,多来这麽几次,便 "Out of environment space" 啦!
做法之一是调高环境空间的大小。请在 c:\config.sys 档中加上这行:
shell=C:\COMMAND.COM C:\ /E:1024 /P
其中 /E:1024 便是表示将环境空间调为 1024 bytes。(不够?再调)
做法之二是不要使用 VCVARS32.BAT 的那种「附加」句型,改用前述我们自己的批次档。要知道,我们可能有好几个编译器环境(VC、BCB、G++ ┅),需要轮番测试我们的程式;如果使用「附加」句型,多来几次,再大的环境空间也会消磨殆尽。
方法一和方法二要双管齐下唷。
●有任何规模上的限制吗?
使用 console 模式(或称 command line 模式)来编译联结程式,程式的大小可否有任何规模上的限制?答案是没有!
它的缺点是没有工具帮你管理档案、没有预设值让你少打几个字、没有分析工具帮你整理 objects,让你浏览 objects、symbols┅。所以一旦你基本功学会了,要开始中大型程式的设计,当然以整合环境(IDE)为佳。
●不要误会
我这不是开倒车,要大家回到茹毛饮血的时代,都回头去做山顶洞人。而是我觉得,对於一位 C/C++ 初学者,整合环境(IDE)的运用恐怕带来一头雾水,不如先在 console mode 下作业。一方面多认识一些环境设定方面的常识,满好的,一方面比较方便好用,也不必写个 1000 行的小小练习还得启动 五五加农炮,一方面求知的力量可以全部放在语言的练习上头。
等有了一定的程度,再使用整合环境,就不会如坠五里雾了。
-- the end
原始链接 : http://jjhou.csdn.net/article99-10.htm
==========================================================
偶滴说明:
以VC 9.0为例,假如cl.exe所在目录为D:\Program Files\Microsoft Visual Studio 9.0\VC\bin下(具体这个目录由你安装的位置所决定),在cmd中,切换到这个目录下,然后输入cl.即:
D:\Program Files\Microsoft Visual Studio 9.0\VC\bin>cl
则可能会出现如下的情况,附图上来 (注:VC6.0可能不会提示没有找不到mspdb60.dll,但VC8.0和VC9.0可能会提示该错误)
对于这个的解决办法有几种,一种是到网上下载mspdb60.dll,然后把它拷贝到C:\WINDOWS\system32目录下
第二种解决办法是:在D:\Program Files\Microsoft Visual Studio 9.0\VC\bin目录下,有个批处理文件VCVARS32.BAT,具体可使用dir命令查看,在Bin目录下,可以直接运行输入VCVARS32.BAT,即如:
D:\Program Files\Microsoft Visual Studio 9.0\VC\bin>VCVARS32.BAT
然后再使用cl命令,这样就不会提示找不到mspdb60.dll了,输入cl命令会有这样的输出:
D:\Program Files\Microsoft Visual Studio 9.0\VC\bin>"D:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"
Setting environment for using Microsoft Visual Studio 2008 x86 tools.
注:使用第二种方法的好处是,直接使用编译器提供的批处理文件VCVARS32.BAT,则整个命令行环境都被设置好了,而使用第一种方法,还需要设置一些环境变量,需要自己写批处理,否则会出现类似如下的错误,如:
LINK : fatal error LNK1104: cannot open file "LIBC.lib"
fatal error C1034: iostream: no include path set
所以这里要设置,PATH和LIB以及INCLUDE等环境变量
具体可以参见本篇文章.不过这个设置是临时性设置的,每次打开DOS窗口都要再运行一次批处理
当然,如果你在安装VC9.0(VC6.0有的,VC9.0也应该有吧,即安装的时候有是否注册环境变量提示)的时候,注册了环境变量的话,在安装的时候,不知道大家有没有注意到.有个窗口,叫Setup Environment Variables,在这个窗体中,有个单选框,名字叫Register Environment Variables,注册了它的话,一切都不需要再设置了,可以直接编译运行的,如果在安装的时候忘记注册了,也有解决办法,可以对着我的电脑点右键-->属性-->环境变量进行设置,类似于配置JDK环境一样,这里不详述,这样设置之后就不是临时性设置了,每次开启DOS就不用在设置了.可以直接编译运行程序了
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
如何在DOS下用C/C++ 编译器的更多相关文章
- 如何在DOS下以管理员身份执行命令?
原创 普通User的DOS窗口: 以管理员身份运行的DOS窗口: 转换(Windows10系统下): 13:11:55 2018-10-18
- 如何在Windows命令行(DOS界面)中调用 编译器 来编译C/C++源程序
首先说明一下背景: 为什么要在DOS界面编译C/C++源程序?有很多现成的开发环境(IDE)如:vs, vc++等,这些开发环境集成了编译,调试,使用起来很方便,而且图形化操作界面,简洁明了.但是在开 ...
- [C] zlstdint(让VC、TC等编译器自动兼容C99的整数类型)V1.0。支持Turbo C++ 3等DOS下的编译器
作者:zyl910 以前我曾为了让VC++等编译器支持C99的整数类型,便编写了c99int库来智能处理(http://www.cnblogs.com/zyl910/p/c99int_v102.htm ...
- JAVA手记 JAVA入门(安装+Dos下运行)
JAVA入门特供= =,今天设置环境变量后用dos运行的时候发现出现“找不到或无法加载主类”,索性查了些资料重新看了看JAVA入门的部分. 声明:我的笔记本暂时用的是Win10系统,Windows其他 ...
- ActiveX控件的基本操作方法以及如何在VS2010下使用控件
在此,小编就介绍下ActiveX控件的基本操作方法以及如何在VS2010下使用控件,我们以一个程序为例, (1) 打开VS2010编译器(右键以管理员身份运行,因为ActiveX需要注册), ...
- 汇编语言程序入门实验一:在dos下对用户输入作出应答
汇编语言程序入门实验一:在dos下对用户输入作出应答 1,背景 成功预言了今天要上计算机操作系统上机实验课,昨天预习后,今天的两个上机实验做得很成功.但是也有一些问题.问题1:学校的系统目前是wind ...
- JAVA设置环境变量和在DOS下运行java程序
在学校实训的这几天,老师带着我们开始深入的复习java.这是第一天的内容哦 对于“JAVA设置环境变量和在DOS下运行java程序”,许多初学者是陌生的,但了解这个却对后期的学习很重要. http:/ ...
- Chrome出了个小bug:论如何在Chrome下劫持原生只读对象
Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...
- DOS下windows系统查看wifi密码
DOS下windows系统查看wifi密码 首先,按win+R键,win键如下 弹出框中输入cmd 在弹出界面输入 netsh wlan show profiles 你可以看到你链接过的所有wifi名 ...
随机推荐
- python 调试工具
https://github.com/what-studio/profiling http://blog.jobbole.com/51062/ http://blog.jobbole.com/5209 ...
- RC4加密算法
RC4是Ron Rivest在1987年设计的密钥长度可变的流加密算法.它加解密使用相同的密钥,因此也属于对称加密算法.RC4是有线等效加密(WEP)中采用的加密算法,也曾经是TLS可采用的算法之一. ...
- windows下使用代理连接github
在公司的windows下使用github,因为github被墙,查了查,发现给在windows下的git制定代理很简单,一句话 git config --global http.proxy htt ...
- c#winform将全局异常抛出,不用大量写try()catch()
一.在program.cs处完善成如下,但是这样后只能抛出主线程(UI)的错误,所以请看第二步 /// 应用程序的主入口点. /// </summary> [STAThread] stat ...
- C小加 之 随机数
描述ACM队的“C小加”同学想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(0<N≤100),对于其中重复的数字,只保留一个,把其余相 ...
- [MySQL] 数据统计 —— 按周,按月,按日分组统计数据
知识关键词:DATE_FORMAT select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case grou ...
- 【Android Api 翻译1】Android Texting(2)Testing Fundamentals 测试基础篇
Testing Fundamentals The Android testing framework, an integral part of the development environment, ...
- VMware系统运维(十七)部署虚拟化桌面 Horizon View Manager 5.2 配置池授权
1.先在域里面新建一个用户组,添加用户 2.点击"授权....",点击"添加...",设置指定的域用户组,点击"确定" 3.授权完成
- linux 打包/解包
zip: 压缩(递归) zip -r x.zip x 解压(覆盖所有) unzip -o x.zip tar: 打包 tar -czvf x.tar x 解包 tar -xzvf x.tar
- 跨域 HTTP 请求
如果你需要从不同的服务器(不同域名)上获取数据就需要使用跨域 HTTP 请求. 跨域请求在网页上非常常见.很多网页从不同服务器上载入 CSS, 图片,Js脚本等. 在现代浏览器中,为了数据的安全,所有 ...