一般在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命令编译动态链接库示例相关推荐

  1. 命令行下使用cl命令设置

    此文档集合了三篇文章的内容,分别是: http://www.xue5.com/Developer/C++/665229.html http://blog.csdn.net/daisy19900111/ ...

  2. Windows命令行下常用网络命令解释大全

    命令行下常用网络命令解释大全 1.Arp 显示和修改"地址解析协议"(ARP) 所使用的到以太网的 IP 或令牌环物理地址翻译表.该命令只有在安装了 TCP/IP 协议之后才可用. ...

  3. 详解Linux命令行下常用svn命令

    2019独角兽企业重金招聘Python工程师标准>>> 本文讲述了Linux命令行下常用svn命令的使用方法,希望对您有所帮助. 1.Linux命令行下将文件checkout到本地目 ...

  4. java test abc_DOS命令行下成功执行命令:java Test abc 21,则以下描述正确的是()

    [单选题]假设有两个整数x和y,表达式x>=y?x:y的含义是() [单选题]下列哪项不是Java语言的关键字?() [判断题]每项经济业务发生后,都会引起企业的资产和权益总额发生增减变动,但会 ...

  5. Linux命令行下常用svn命令的使用方法[转自:www.hackbase.com]

    本文讲述了Linux命令行下常用svn命令的使用方法,希望对您有所帮助. 1.Linux命令行下将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如: ...

  6. linux枯燥命令行下的“有趣命令”

    本文所有示例都使用Ubuntu Linux.文中描述命令行功能或许在你的Linux系统中是默认的. 有趣的Linux命令行功效 1. Linux"sl"命令行 尽管"sl ...

  7. 命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法...

    在学习NDK中,当我在项目的bin/classes目录下使用javah命令生成头文件时,出现了"错误: 无法访问android.app.Activity 找不到android.app.Act ...

  8. DOS命令行下输入mount命令

    在DOS命令行输入mount命令如果在未作更改的情况会得到报错 在没有安装windos的扩展功能的时候DOS默认是没有这个指令的 在windos Server 的版本中需要在服务器管理中添加文件服务器 ...

  9. mac下终端命令行下添加mysql命令

    我的mysql数据库是使用的MAMP集成的,在使用终端命令总是要去/Applications/MAMP/Library/bin/mysql(这是我的目录)去打开,很麻烦,所以想把它配置在Termina ...

最新文章

  1. TThread深入分析
  2. swift:打造你自己的折线图
  3. Spring:设置日志依赖项
  4. [react] 使用PropTypes和Flow有什么区别?
  5. kafka控制台模拟消费_Flink初试——对接Kafka
  6. Python中的命名空间是什么?
  7. 第0课第2节_刚接触开发板之烧写裸板程序
  8. 背起行囊,就是过客;放下包袱,就有归宿。
  9. linux 路由跟踪命令_一文掌握linux系统路由跟踪指令traceroute
  10. 基数树(radix tree)
  11. spring-boot设置静态文件路径
  12. 1501_FTA失效树分析简介
  13. springMVC 用超链接做国际化
  14. win10计算机搜索记录怎么删除,win10系统清除电脑里搜索记录的操作方法
  15. 【CTF基础】有限域椭圆曲线定义与计算方式
  16. 极路由php插件,极路由SDK
  17. 商品货架管理(愿疫情早日消散,大家去见想见的人)
  18. 来一起造轮子:手写 Vue3 reactivity 模块
  19. 过扫描和欠扫描的前因后果
  20. item_get - 根据ID取商品详情

热门文章

  1. JavaScript mongodb(数据库)复杂值
  2. Computer:成功解决在WPS中合并论文中两个文档(比如将另一个封皮的文档合并在当前文档当中)
  3. Android .9图片使用报错...报错:AAPT: error: file failed to compile.
  4. python视频解析UI界面
  5. jQuery绑定一次性事件和注销事件
  6. 低功耗读卡(RFID)电路与程序实现
  7. 利用Amber热力学积分计算相对自由能变化
  8. 精准授时,GPS北斗卫星授时同步时钟系统的天花板
  9. 《微信小程序七日谈》- 第七天:不要捡了芝麻丢了西瓜
  10. postgresql时区