在cmd命令行下编译运行C/C++源文件

一直用java来写程序,java配置好jre路径之后,在cmd下编译运行,很方便。

刚好要给一个舍友改下C程序,想到可不可以像java一样在环境变量里配置好C的编译路径呢?

于是上网搜了一下,得到如下结果:

一、如果装有VC,那就简单了,因为VC带有C的编译器,可以将此路径设置进环境变量。

Windows系统下编译连接源代码方法:
cl -GX test.c
-GX: 启动同步异常处理
上面的命令会产生可执行程序:test.exe
在命令行中直接输入:test.exe 就可运行该程序

Tips:
一、cmd中键入cl提示不认识cl命令,则由于无法找到cl.exe程序。解决方法如下:
添加系统变量(Path),这样:我的电脑->属性->高级->环境变量->系统变量,在path中添加
C:/Program Files/Microsoft Visual Studio 9.0/VC/bin;。
注意:
1、结尾最后用“;”隔开!
2、如果你的Microsoft Visual Studio 低于9.0版本或高于9.0版需要修改上面的路径名称。

二、cmd中键入cl执行编译时会出现mspdb80.dll无法找到的情况,是因为VC/Bin/下没有 “msobj80.dll,
mspdb80.dll,mspdbcore.dll,mspdbsrv.exe”这四个文件,解决的方法:
1>直接从Common7/IDE/下复制这四个文件到VC/Bin/下即可解决
2>添加系统变量(Path),这样:我的电脑->属性->高级->环境变量->系统变量,在path中添加 C:/Program Files/Microsoft Visual Studio 8/Common7/IDE;,注意结尾最后用“;”隔开!
这样在用cl编译就不会出现mspdb80.dll文件找不到的错误了。

三、如果你在编译过程中,出现一下错误:
1、fatal error C1034: stdio.h: no include path set
2、fatal error LNK1104: cannot open file "kernel32.lib
请在我的电脑->属性->高级->环境变量->系统变量中新建系统变量LIB、INCLUDE并设置它们的值为:
(LIB)C:/Program Files/Microsoft SDKs/Windows/v6.0A/Lib;C:/Program Files/Microsoft SDKs/Windows/v5.0/Lib;C:/Program Files/Microsoft Visual Studio 9.0/VC/lib
(INCLUDE)C:/Program Files/Microsoft Visual Studio 9.0/VC/include

Linux系统下编译连接源代码的方法:
gcc -g -c test.c -o test    只生成目标文件(.obj文件),没有生成可执行文件(也就是说test是.obj文件)

gcc -g test.c -o test        生成可执行文件(可以通过./test运行程序)

-g:生成调试信息。GNU 调试器可利用该信息。
-c:只编译并生成目标文件。(没有中间文件生成和可执行文件,如列表文件、可执行文件)
-o:设置生成的可执行程序的名字为test
上面的命令会产生可执行程序:test
在Terminal中输入:./test 就可以运行该程序了。

操作步骤如下:

1.在命令行下,先运行vcvars32.bat(此文件在VC安装目录/Bin文件夹里,其中设置了环境变量和路径等信息)。或者,手动修改环境变量:

path=你安装VS的路径/VC98/Bin

lib=你安装VS的路径/VC98/lib;你安装VS的路径/VC98/MFC/lib

include=你安装VS的路径/VC98/include;你安装VS的路径/VC98/MFC/include;你安装VS的路径/VC98/ATL/lib

2.然后直接用CL编译器编译C++程序(如:CL /GX /MT zx.cpp)。

CL经常使用的选项为:

   多线程dll(/MD)-动态链接,不包含运行时库文件

   多线程(/MT)-静态链接,包含运行时库文件

附:CL 参数,即编译选项如下:

-优化- 

/O1 最小化空间                                                               /Op[-] 改善浮点数一致性 
/O2 最大化速度                                                                /Os 优选代码空间 
/Oa 假设没有别名                                                           /Ot 优选代码速度 
/Ob<n> 内联展开(默认 n=0)                                            /Ow 假设交叉函数别名 
/Od 禁用优化(默认值)                                                       /Ox 最大化选项。(/Ogityb2 /Gs) 
/Og 启用全局优化                                                            /Oy[-] 启用框架指针省略 
/Oi 启用内部函数 

-代码生成- 

/G3 为 80386 进行优化                                                           /Gh 启用 _penter 函数调用 
/G4 为 80486 进行优化                                                            /GH 启用 _pexit 函数调用 
/G5 为 Pentium 进行优化                                                          /GR[-] 启用 C++ RTTI 
/G6 对 PPro、P-II、P-III 进行优化                                            /GX[-] 启用 C++ EH (与 /EHsc 相同) 
/G7 对 Pentium 4 或 Athlon 进行优化                                      /EHs 启用 C++ EH (没有 SEH 异常) 
/GB 为混合模型进行优化(默认)                                                 /EHa 启用 C++ EH(w/ SEH 异常) 
/Gd __cdecl 调用约定                                                              /EHc extern "C" 默认为 nothrow 
/Gr __fastcall 调用约定                                                            /GT 生成纤维安全   TLS 访问 
/Gz __stdcall 调用约定                                                               /Gm[-] 启用最小重新生成 
/GA 为 Windows 应用程序进行优化                                        /GL[-] 启用链接时代码生成 
/Gf 启用字符串池                                                                     /QIfdiv[-] 启用 Pentium FDIV 修复 
/GF 启用只读字符串池                                                             /QI0f[-] 启用 Pentium 0x0f 修复 
/Gy 分隔链接器函数                                                                /QIfist[-] 使用 FIST 而不是 ftol() 
/GZ 启用堆栈检查(/RTCs)                                                        /RTC1 启用快速检查(/RTCsu) 
/Ge 对所有函数强制堆栈检查                                                   /RTCc 转换为较小的类型检查 
/Gs[num]   控制堆栈检查调用                                                    /RTCs 堆栈帧运行时检查 
/GS 启用安全检查                                                                    /RTCu 未初始化的本地用法检查 
/clr[:noAssembly] 为公共语言运行库编译 
           noAssembly - 不产生程序集 
/arch:<SSE|SSE2> CPU 结构的最低要求,以下内容之一: 
                        SSE - 启用支持 SSE 的 CPU 可用的指令 
                        SSE2 - 启用支持 SSE2 的 CPU 可用的指令 

-输出文件- 

/Fa[file] 命名程序集列表文件                                      /Fo<file> 命名对象文件 
/FA[sc] 配置程序集列表                                                /Fp<file> 命名预编译头文件 
/Fd[file] 命名 .PDB 文件                                              /Fr[file] 命名源浏览器文件 
/Fe<file> 命名可执行文件                                          /FR[file] 命名扩展 .SBR 文件 
/Fm[file] 命名映射文件 

-预处理器- 

/AI<dir> 添加到程序集搜索路径                                /Fx 将插入的代码合并到文件 
/FU<file> 强制使用程序集/模块                                   /FI<file> 命名强制包含文件 
/C 不抽出注释                                                            /U<name> 移除预定义宏 
/D<name>{=|#}<text> 定义宏                                    /u 移除所有预定义宏 
/E 预处理到 stdout                                                   /I<dir> 添加到包含搜索路径 
/EP 预处理到 stdout,没有 #line                             /X 忽略“标准位置” 
/P 预处理到文件 

-语言- 

/Zi 启用调试信息                                                     /Ze 启用扩展(默认) 
/ZI 启用“编辑并继续”调试信息                              /Zl 省略 .OBJ 中的默认库名 
/Z7 启用旧式调试信息                                              /Zg 生成函数原型 
/Zd 仅有行号调试信息                                              /Zs 只进行语法检查 
/Zp[n] 在 n 字节边界上包装结构                             /vd{0|1} 禁用/启用 vtordisp 
/Za 禁用扩展(暗指 /Op)                                             /vm<x> 指向成员的指针类型 
/Zc:arg1[,arg2] C++ 语言一致性,这里的参数可以是: 
                      forScope - 对范围规则强制使用标准 C++ 
                      wchar_t - wchar_t 是本机类型,不是 typedef 

- 杂项 - 

@<file> 选项响应文件                                             /wo<n> 发出一次警告 n 
/?, /help 打印此帮助消息                                          /w<l><n> 为 n 设置警告等级 1-4 
/c 只编译,不链接                                                  /W<n> 设置警告等级(默认 n=1) 
/H<num> 最大外部名称长度                                    /Wall 启用所有警告 
/J 默认 char 类型是 unsigned                               /Wp64 启用 64 位端口定位警告 
/nologo 取消显示版权消息                                  /WX 将警告视为错误 
/showIncludes 显示包含文件名                            /WL 启用单行诊断 
/Tc<source file> 将文件编译为 .c                          /Yc[file] 创建 .PCH 文件 
/Tp<source file> 将文件编译为 .cpp                   /Yd 将调试信息放在每个 .OBJ 中 
/TC 将所有文件编译为 .c                                       /Yl[sym] 为调试库插入 .PCH 引用 
/TP 将所有文件编译为 .cpp                                  /Yu[file] 使用 .PCH 文件 
/V<string> 设置版本字符串                                  /YX[file] 自动 .PCH 
/w 禁用所有警告                                                    /Y- 禁用所有 PCH 选项 
/wd<n> 禁用警告 n                                               /Zm<n> 最大内存分配(默认为 %) 
/we<n> 将警告 n 视为错误 

-链接- 

/MD 与 MSVCRT.LIB 链接                                   /MDd 与 MSVCRTD.LIB 调试库链接 
/ML 与 LIBC.LIB 链接                                        /MLd 与 LIBCD.LIB 调试库链接 
/MT 与 LIBCMT.LIB 链接                                     /MTd 与 LIBCMTD.LIB 调试库链接 
/LD 创建 .DLL                                                       /F<num> 设置堆栈大小 
/LDd 创建 .DLL 调试库                                       /link [链接器选项和库]  

 

关于链接时参数的说明:

VC项目属性→配置属性→C/C++→代码生成→运行时库 可以采用的方式有:多线程(/MT)、多线程调试(/MTd)、多线程DLL(/MD)、多线程调试DLL(/MDd)、单线程(/ML)、单线程调试(/MLd)

Reusable Library

Switch

Library

Macro(s) Defined

Single Threaded

/ML

LIBC

(none)

Static MultiThread

/MT

LIBCMT

_MT

Dynamic Link (DLL)

/MD

MSVCRT

_MT and _DLL

Debug Single Threaded

/MLd

LIBCD

_DEBUG

Debug Static MultiThread

/MTd

LIBCMTD

_DEBUG and _MT

Debug Dynamic Link (DLL)

/MDd

MSVCRTD

_DEBUG, _MT, and _DLL

 

    其中以小写“d”结尾的选项表示的DEBUG版本的,没有“d”的为RELEASE版本。大型项目中必须要求所有组件和第三方库的运行时库是统一的,否则将会出现LNK2005井喷。

    单线程运行时库选项/ML和/MLd在VS2003以后就被废了。

    /MT和/MTd表示采用多线程CRT库的静态lib版本。该选项会在编译时将运行时库以静态lib的形式完全嵌入。该选项生成的可执行文件运行时不需要运行时库dll的参加,会获得轻微的性能提升,但最终生成的二进制代码因链入庞大的运行时库实现而变得非常臃肿。当某项目以静态链接库的形式嵌入到多个项目,则可能造成运行时库的内存管理有多份,最终将导致致命的“Invalid Address specified to RtlValidateHeap”问题。另外托管C++和CLI中不再支持/MT和/MTd选项。

    /MD和/MDd表示采用多线程CRT库的动态dll版本,会使应用程序使用运行时库特定版本的多线程DLL。链接时将按照传统VC链接dll的方式将运行时库MSVCRxx.DLL的导入库MSVCRT.lib链接,在运行时要求安装了相应版本的VC运行时库可再发行组件包(当然把这些运行时库dll放在应用程序目录下也是可以的)。 因/MD和/MDd方式不会将运行时库链接到可执行文件内部,可有效减少可执行文件尺寸。当多项目以MD方式运作时,其内部会采用同一个堆,内存管理将被简化,跨模块内存管理问题也能得到缓解。

    结论:/MD和/MDd将是潮流所趋,/ML和/MLd方式请及时放弃,/MT和/MTd在非必要时最好也不要采用了。

 

二、单独下载gcc程序,同样的设置环境变量就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

制作程序化装饰花纹图案_用装饰器设计图案装饰

制作程序化装饰花纹图案装饰图案是广泛使用的结构图案之一。 此模式在运行时动态更改对象的功能&#xff0c;而不会影响对象的现有功能。 简而言之&#xff0c;此模式通过包装将附加功能添加到对象。 问题陈述&#xff1a; 想象一个场景&#xff0c;我们有一个比萨饼&#xff…

10停止nginx命令 win_windows版nginx快速操控神器(重启,关闭)

众所周知,Windows 版本的Nginx 是linux版本的阉割版,但是在开发或者个人测试的时候,还是非常好用的&#xff0c;但是nginx运行的命令自己敲打起来不是那么的方便,因此呢&#xff0c;我们就写了个Bat批处理小程序&#xff0c;封装了这些命令&#xff0c;2.1版本您只需要配置下 N…

学习vi和vim编辑器(8):全局替换(1)

本章学习vi编辑器中的全局替换命令。通过全局替换命令&#xff0c;可以自动替换文件中所有出现过的某个单词。全局替换一般会用到两个ex命令&#xff1a;":g"(global)&#xff0c;":s"(substitute)。 替换命令&#xff1a; 替换命令的语法如下&#xff1…

使用DynamoDBMapper查询DynamoDB项目

在上一篇文章中&#xff0c;我们使用底层Java api在DynamoDB数据库上发出了查询。 使用DynamoDBMapper进行查询非常简单。 使用哈希键发出查询非常简单。 这样的查询的最佳候选者是通过使用电子邮件哈希键进行搜索的Users表。 public User getUser(String email) {User user…

实训二—博客三

学期末总结 经过了一个学期的java学习&#xff0c;使我对java产生了很大的兴趣&#xff0c;虽然我学的并不怎么好&#xff0c;但是我喜欢程序可以成功运行时带来的成就感&#xff0c;我也享受排错的过程。学加练的上课模式我觉得也很棒&#xff0c;给了我们独立思考编程的时间&…

小肚皮最新版本_小肚皮旧版本

00后最炙手可热的社交软件《小肚皮旧版本》等你下载天&#xff0c;在这里独特的社交玩法等你感受&#xff0c;为你带来有趣的玩法乐趣&#xff0c;小肚皮旧版本中丰富的乐趣玩法等你来感受&#xff0c;让你轻松享受到更多的乐趣所在&#xff0c;为你带来不一样的社交乐趣。特色…

小心使用STL中map的[]操作符

一个map就是一个&#xff08;关键码&#xff08;key&#xff09;&#xff0c;值&#xff08;value&#xff09;&#xff09;对偶的序列&#xff0c;它提供基于关键码的快速提取操作。也就是说&#xff0c;可以用下标运算符[]将关键码作为下标去执行查找&#xff0c;并返回对应的…

存图

转载于:https://www.cnblogs.com/simple-huang/p/10183360.html

地平线机器人_地平线机器人CEO余凯:基于深度学习的自动驾驶之路

请关注公众号“汽车创新港”&#xff0c;获取后续更多论坛实录&#xff01;加工作人员微信号&#xff1a;tinydanio&#xff0c;备注“我要入群”直接进入直播群&#xff01;今天都是大牛&#xff0c;下面的也是技术大牛&#xff0c;是百度深度学习实验室创始人&#xff0c;百度…

Mac os下android studio模拟器无法联网解决方法

步骤1: https://blog.csdn.net/qq_33945246/article/details/79908298 步骤2: 访达进入/Users/文件夹 步骤3: shiftcmmand.显示隐藏文件夹 步骤4 打开.android文件夹 点击adv文件夹进入&#xff0c;然后回到 "步骤1"查看解决方法 本人创业做的一款androidApp, 下载量…

matlab中表示拉普拉斯分布_深度优化局部拉普拉斯金字塔滤波器。

微信公众号&#xff1a;OpenCV学堂关注获取更多计算机视觉与深度学习知识觉得文章有用&#xff0c;请戳底部【好看】支持算法概述基于局部拉普拉斯金字塔的Edge-aware滤波器是在2011年由Adobe 公司的研究员Sylvain Paris(大神级人物&#xff0c;写了很多文章)提出的&#xff0c…

设计模式 命令模式 实例_根据您的命令-命令设计模式

设计模式 命令模式 实例命令设计模式是一种广为人知的设计模式&#xff0c;属于行为设计模式&#xff08;“四人帮”的一部分&#xff09;。 顾名思义&#xff0c;它与应用程序中的动作和事件有关。 问题陈述&#xff1a; 假设有一个网页将在其中包含多个菜单的情况。 编写此…

Linux(CentOS)挂载U盘、移动硬盘以及文件拷贝、备份

说明&#xff1a; 环境&#xff1a;VMware workstation 系统&#xff1a;centos6.2 以下操作均在root下执行的 1.U盘挂载 mkdir /mnt/usb //创建一个目录&#xff0c;用于挂载U盘 fdisk -l //查看系统中挂载的U盘&#xff0c;若系统有一块硬盘sdb1 代表你的U盘&#xff0c;…

iservice封装有哪些方法_5w大功率led白光灯珠参数,5w大功率led灯珠有哪些?

5w大功率led&#xff0c;5w大功率led白光灯珠参数&#xff0c;5w大功率led灯珠有哪些&#xff1f;5w大功率led&#xff0c;5w大功率led白光灯珠参数&#xff0c;5w大功率led灯珠有哪些&#xff1f;5w大功率led灯珠今天上午&#xff0c;一位台湾高雄的客户咨询定做5W大功率LED灯…

Java EE调度程序

Java EE应用程序服务器具有本机调度支持&#xff0c;并且在大多数应用程序中&#xff0c;不需要包括外部依赖项&#xff0c;例如著名的Quartz调度程序库。 Java EE 6和7完整配置文件中提供的Java EE 6计时器服务为我们提供了许多选项来定义调度间隔&#xff0c;以及如果停止并…

Simulink工作区无法保存To workspace模块的数据解决办法

1.首先要搞清楚Workspace概念。包括基本工作区&#xff08;base workspace&#xff09;和函数工作区。默认条件下在命令窗口中输入命令使用的是base workspace&#xff0c;但对于每个函数&#xff0c;都有自己独立的工作区。 2.GUI回调函数作为function有独立的工作区。 3.使…

对KVM虚拟机进行cpu pinning配置的方法

这篇文章主要介绍了对KVM虚拟机进行cpu pinning配置的方法,通过文中的各种virsh命令可进行操作,需要的朋友可以参考下首先需求了解基本的信息1 宿主机CPU特性查看 使用virsh nodeinfo可以看到一些基本信息 #virsh nodeinfo CPU model: x86_64 CPU(s): 32 CPU frequency: 1200 M…

1千条数据平均分配给15人_5项数据挂零!但5犯太吓人!CBA第1狠人场均干1人

昨天CBA常规赛第26轮&#xff1a;山东西王89-86北京首钢。上半场&#xff0c;双方打得非常激烈&#xff0c;比分交替领先。第3节北京抓住机会&#xff0c;顺势拉开比分(68-57)。李慕豪接方硕助攻&#xff0c;轻松扣篮得分。首钢替补席一片欢声笑语&#xff0c;方巨头和翟晓川笑…

redhat/centos 搭建svn服务器环境

subversion支持3种服务配置1、apache mod_dav_svn2、svnserve 3、穿越ssh隧道的svnserve教程选择的是最简单的svnserve的服务1、安装svnservyum install subversion2、建立一个仓库 respository$ mkdir /home/svn$ mkdir /home/code$ svnadmin create /home/svn/repository3、…

win10插入耳机没声音解决办法

之前重装了win10系统&#xff0c;装完系统后&#xff0c;发现插入耳机没有声音&#xff0c;非常令人难受&#xff01;经过一番探索&#xff0c;终于解决了这个问题&#xff0c;在此与大家分享。 1.点击左下角搜索框&#xff0c;输入控制面板&#xff0c;点击enter打开 2.打开…