windows命令行下通过cl命令编译动态链接库示例
一般在windows下写一个c/c++的动态链接库,我们都是在visual studio或着visual c++这些ide里面进行编译和生成的,今天介绍,如何通过命令行来实现手动编译和生成动态链接库。
首先,确保我们的系统中安装了visual studio 2019或着其他版本,这样,我们才可以使用命令行工具。
开始->程序里面找到visual studio 2019这个文件夹,里面有命令行工具。找到"x64 Native Tools Command Prompt for VS 2019",然后点击,打开一个cmd命令行。
我们准备我们的两个简单的程序,一个是动态库,一个是调用动态库的程序:
test.c
#include <stdlib.h>
__declspec(dllexport) int add(int a,int b)
{return a + b;
}
main.c
#include <stdio.h>
extern int add(int a,int b);int main(){int i = add(1,2);printf("add(1,2)=%d\n",i);return 0;
}
开始编译:
cl -c test.c
在打开的cmd命令行中,切换到我们的项目目录下,然后运行cl指令:
该命令执行之后,会生成一个test.obj文件,接着,我们运行链接命令:
link -dll -out:test.dll test.obj
从命令上,我们可以看出,会生成动态链接库test.dll,其实,同时还会生成test.lib,test.exp文件。
-----------------------------------------------------------
以上两步操作,其实可以通过一个命令来完成,就是:
cl /LD test.c
该命令可以直接生成动态链接库dll。
我们还可以通过dumpbin命令,查看生成的动态库的信息:
dumpbin -exports test.dll
有了动态链接库,我们接着利用这个动态链接库来生成main可执行程序。
cl main.c test.lib
运行该命令,会生成main.exe程序,在命令行下,可以直接运行:main,就可以看到打印结果:
以上就是在命令行下编译生成动态链接库的过程,如果你的系统里面没有cl指令,可能是没有安装visual studio或者visual c++,如果安装了,进入他自带的命令行工具,就有这些命令了。
windows命令行下通过cl命令编译动态链接库示例相关推荐
- 命令行下使用cl命令设置
此文档集合了三篇文章的内容,分别是: http://www.xue5.com/Developer/C++/665229.html http://blog.csdn.net/daisy19900111/ ...
- Windows命令行下常用网络命令解释大全
命令行下常用网络命令解释大全 1.Arp 显示和修改"地址解析协议"(ARP) 所使用的到以太网的 IP 或令牌环物理地址翻译表.该命令只有在安装了 TCP/IP 协议之后才可用. ...
- 详解Linux命令行下常用svn命令
2019独角兽企业重金招聘Python工程师标准>>> 本文讲述了Linux命令行下常用svn命令的使用方法,希望对您有所帮助. 1.Linux命令行下将文件checkout到本地目 ...
- java test abc_DOS命令行下成功执行命令:java Test abc 21,则以下描述正确的是()
[单选题]假设有两个整数x和y,表达式x>=y?x:y的含义是() [单选题]下列哪项不是Java语言的关键字?() [判断题]每项经济业务发生后,都会引起企业的资产和权益总额发生增减变动,但会 ...
- Linux命令行下常用svn命令的使用方法[转自:www.hackbase.com]
本文讲述了Linux命令行下常用svn命令的使用方法,希望对您有所帮助. 1.Linux命令行下将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如: ...
- linux枯燥命令行下的“有趣命令”
本文所有示例都使用Ubuntu Linux.文中描述命令行功能或许在你的Linux系统中是默认的. 有趣的Linux命令行功效 1. Linux"sl"命令行 尽管"sl ...
- 命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法...
在学习NDK中,当我在项目的bin/classes目录下使用javah命令生成头文件时,出现了"错误: 无法访问android.app.Activity 找不到android.app.Act ...
- DOS命令行下输入mount命令
在DOS命令行输入mount命令如果在未作更改的情况会得到报错 在没有安装windos的扩展功能的时候DOS默认是没有这个指令的 在windos Server 的版本中需要在服务器管理中添加文件服务器 ...
- mac下终端命令行下添加mysql命令
我的mysql数据库是使用的MAMP集成的,在使用终端命令总是要去/Applications/MAMP/Library/bin/mysql(这是我的目录)去打开,很麻烦,所以想把它配置在Termina ...
最新文章
- TThread深入分析
- swift:打造你自己的折线图
- Spring:设置日志依赖项
- [react] 使用PropTypes和Flow有什么区别?
- kafka控制台模拟消费_Flink初试——对接Kafka
- Python中的命名空间是什么?
- 第0课第2节_刚接触开发板之烧写裸板程序
- 背起行囊,就是过客;放下包袱,就有归宿。
- linux 路由跟踪命令_一文掌握linux系统路由跟踪指令traceroute
- 基数树(radix tree)
- spring-boot设置静态文件路径
- 1501_FTA失效树分析简介
- springMVC 用超链接做国际化
- win10计算机搜索记录怎么删除,win10系统清除电脑里搜索记录的操作方法
- 【CTF基础】有限域椭圆曲线定义与计算方式
- 极路由php插件,极路由SDK
- 商品货架管理(愿疫情早日消散,大家去见想见的人)
- 来一起造轮子:手写 Vue3 reactivity 模块
- 过扫描和欠扫描的前因后果
- item_get - 根据ID取商品详情
热门文章
- JavaScript mongodb(数据库)复杂值
- Computer:成功解决在WPS中合并论文中两个文档(比如将另一个封皮的文档合并在当前文档当中)
- Android .9图片使用报错...报错:AAPT: error: file failed to compile.
- python视频解析UI界面
- jQuery绑定一次性事件和注销事件
- 低功耗读卡(RFID)电路与程序实现
- 利用Amber热力学积分计算相对自由能变化
- 精准授时,GPS北斗卫星授时同步时钟系统的天花板
- 《微信小程序七日谈》- 第七天:不要捡了芝麻丢了西瓜
- postgresql时区