Visual Stdio C++ 编译器、链接器常用命令行 (转)

以前使用 Visual Stdio 都是在 IDE 环境下。这两天编译 GSL 感觉用 IDE 环境特别不方便,所以就花了点时间简单学习了如何在命令行下使用 Visual Stdio C++ 编译器、连接器。

我个人对 gcc 还是比较熟悉的,所以这里的各种用法都做了 gcc 的类比,这样也便于记忆。

编译器 CL

Visual Stdio 中的 C/C++ 编译器都是同一个,叫做 CL。下面表格列出了一些基本的命令行选项。

CL gcc 说明
/E -E 输出预处理结果
/Fa -S 输出汇编文件
/Za -ansi 禁止语言扩展,这两个还不是等价的
/Dname -Dname 定义一个宏,相对于在代码中添加了 #define name
/Dname=value -Dname=value 定义一个宏,相对于在代码中添加了 #define name value
/Wall -Wall 将所有的警告信息全开。
/Od -O0 禁止优化
/O1 -Os 以最节省空间为目标优化
/O2 -O2 以允许速度最快为目标优化
/Idirecotry -Idirecotry 指定头文件搜索路径
/c -c 生成目标文件 .obj, 不链接
/libpath:direcotry -Ldirecotry 指定库文件搜索路径(MSVC的/libpath属于链接选项,第一个链接选项之前要指定/link选项,用来告诉编译器驱动,后续选项传给链接器使用)
/GR,/GR- -frtti,-fno-rtti 开启或关闭RTTI
/link -Wl 链接指定的模块或给链接器传递参数
/LD -shared 编译产生DLL文件
/LDd   编译产生DLL文件(调试版)
/MD   与动态多线程版本运行库MSVCRT.LIB链接
/MDd   与调试版动态多线程版本运行库MSVCRTD.LIB链接
/MT   与静态多线程版本运行库LIBCMT.LIB链接
/MTd   与调试版静态多线程版本运行库LIBCMTD.LIB链接

除了这些,还有不少的命令行选项,不过一般用途来说,这些就够用了。

连接器 link

对应 gcc 工具链中的 ld。

link ld 说明
/BASE:address   指定输出文件的基地址
/DEBUG   输出调试模式版本
/DEF:filename   指定模块定义文件.DEF
/DEFAULTLIB:library   指定默认运行库
/DLL –relocateable 产生DLL
/ENTRY:symbol –entry=symbol 指定程序入口
/EXPORT:symbol   指定某个符号位导出符号
/HEAP   指定默认堆大小
/LIBPATH:dir   指定链接时库搜索路径
/MAP:MAPFILE -Map MAPFILE 产生链接MAP文件
/NODEFAULTLIB   禁止默认运行库
/OUT:name -o name 指定输出文件名为 name
/STACK   指定默认栈大小
/SUBSYSTEM   指定子系统,常见选项是 windows 和 console

生成静态库. lib

lib 可以将一系列的 obj 文件打包为一个静态库 .lib。也可以将几个 .lib 合成一个 .lib。或者将几个 .obj 和 .lib 合成一个 .lib。

比如我们有 add.obj sub.obj div.lib 这三个文件,我们想将他们合成为一个 all.lib。

那么可以这样:

lib add.obj sub.obj div.lib /out:all.lib

如果要将这三个文件合并为一个 all.dll 那么我们还需要个 .def 文件。里面给出哪些符号要导出。

类似下面这个样子:

LIBRARY   all.dll
EXPORTS
   add
   sub
   div

之后执行 link 命令:

link /SUBSYSTEM:windows /dll /def:all.def /out:all.dll add.obj sub.obj div.lib
 

原文地址:https://www.cnblogs.com/flowingwind/p/8306427.html

时间: 2024-09-30 00:54:04

Visual Stdio C++ 编译器、链接器常用命令行 (转)的相关文章

Mysql常用命令行大全——转载

转载地址:http://www.blogjava.net/supperchen/archive/2012/10/11/389340.html 第一招.mysql服务的启动和停止 net stop mysql net start mysql 第二招.登陆mysql 语法如下: mysql -u用户名 -p用户密码 键入命令mysql -uroot -p, 回车后提示你输入密码,输入12345,然后回车即可进入到mysql中了,mysql的提示符是: mysql> 注意,如果是连接到另外的机器上,则

jdk自带常用命令行工具使用

下面是笔者整理的jdk自带的常用命令行工具的使用方法,全部原创,转载请注明出处,并贴上链接,谢谢! jps命令使用 jstat命令使用 jinfo命令使用 jmap命令使用 jhat命令使用 jstack命令使用 jcmd命令使用

Linux - 常用命令行(一)

今天和大家分享一些最基本常用命令行:也是作为新手最应该了解掌握的 ls 命令:用来显示指定工作目录下内容 dir命令:与ls命令一致 cd  命令:变化工作目录 pwd命令:显示用户当前的工作路径,显示出完整的当前活动目录名称 clear 命令:清屏命令 man 命令:查看指定命令help信息 mkdir 命令:用来创建新目录 rmdir 命令: 用来删除已建立的目录 rm 命令:删除文档及目录 touch 命令: 创建一个空白的文件 或 改变一个文件的时间戳 cp 命令:复制文件(或目录) m

Linux 操作MySQL常用命令行

Linux 操作MySQL常用命令行 注意:MySQL中每个命令后都要以分号:结尾. 1.显示数据库 mysql> show databases; +----------+ | Database | +----------+ | mysql | | test | +----------+ 2 rows in set (0.04 sec) Mysql刚安装完有两个数据库:mysql和test.mysql库非常重要,它里面有MySQL的系统信息,我们改密码和新增用户,实际上就是用这个库中的相关表进行

rabbitmq常用命令行汇总

最近处理openstack问题时,碰到了rabbitmq相关的问题,使用相关命令行时,经常去现找相关的帖子,感觉很麻烦,记录下自己定位问题时,用到的一些常用命令行,方便以后问题的查找 1)常用的一些查询和设置命令行 rabbitmqctl list_queues:查看所有队列信息 rabbitmqctl stop_app:关闭应用(关闭当前启动的节点) rabbitmqctl start_app:启动应用,和上述关闭命令配合使用,达到清空队列的目的 rabbitmqctl reset:从管理数据

linux 常用命令行

linux 常用命令行(持续更新) 1.使用pid查询端口号 sudo netstat -antup|grep PID号 2.查询端口号所有情况 sudo netstat -antup    3.启动.重启.关闭tomcat服务器,若没有权限则加sudo service tomcat6 start service tomcat6 restart service tomcat6 stop 4.查看防火墙情况 chkconfig --list |grep -i iptables 原文地址:https

[转]GCC使用手册及常用命令行

一.GCC功能介绍 GCC编译器完成从C.C++.objective-C等源文件向运行在特定CPU硬件上的目标代码的转换(这是任何一个编译器需要完成的任务). GCC能够处理的源文件分为C.C++.Objective-C.汇编语言等.对于这些源文件,用他们的后缀名进行标示.GCC能够处理的后缀有: a. *.c  *.C      (C语言) b. *.cxx   *.cc  (C++语言) c. *.m           (面向对象的C) d. *.i           (预处理后的C语言

Gcc常用命令行

本篇文章摘自 http://blog.csdn.net/ljzcom/article/details/7213101 对于Gcc自带的很多命令行,只有具体编程里面用到了或者看到别人真真用到的,用的目的很清楚,才有价值记录下来,常用的记在脑子里面,这就够了.对于Linux基本编程工具的总结,之前都是总结在有道云笔记里面,觉的,那里面的太封闭了,写的好不好,只有自己知道.自己一直秉持着技术开放的心态,能够清晰的讲解出来的技术,才是你真正消化吸收的东西. Gcc功能介绍 Gcc编译器完成从原始的C.C

vi 常用命令行

1.vi 模式  a) 一般模式: vi 处理文件时,一进入该文件,就是一般模式了.  b) 编辑模式:在一般模式下可以进行删除,复制,粘贴等操作,却无法进行编辑操作.等按下‘i,I,o,O,a,A,r,R’等          字母之后才能进入编辑模式.通常在linux中,按下上述字母时,左下方会出现'INSERT'或者‘REPLACE’字样,才可以          输入任何文字到文件中.要回到一般模式,按下[ESC]键即可.  c) 命令行模式:在一般模式中,输入“: 或者/或者?”,即可