VS2017 DLL动静态库使用教程【一】创建一个DLL

C 语言 静态链接库 (.a/.lib) & 动态链接库 (.so/.dll) 制作与使用(嵌入式 / PC 端全流程,附代码 + 命令) 静态库:编译时嵌入可执行文件,独立运行、体积大、更新需重编译,嵌入式首选;动态库:运行时加载,体积小、更新方便、多进程共享,PC 端高频更新模块首选;编译.o文件→打包/链接为库→指定头文件/库路径调用;命名规范:Linux / 嵌入式,Windows。掌握库的制作和使用,是从 “零散代码” 到 “工程化开发” 的关键,比如你可以把 PID、滤波、通信协议等通用逻辑封装成静态库,在多个 STM32 项目中复用,既提高效率,又保护核心代码! 阅读详情

考虑两个问题:

1,printf是我们用过很多次的函数,但这个函数定义在哪里?他只有<stdio.h>一个声明。

2,你发明一个有价值的算法,需要给别人使用,又不想开放源码。

在c++里,使用库的技术,可以将编译好的代码提供给第其他程序员,保证代码的隐私性,

库为两种:

1,动态库 Dynamic Link Library (DLL)

2,静态库 static library(lib)

两者区别:

静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。

动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。

 

好了废话不多,我们开始创建一个动态库:

首先在vs2017中新建一个DLL库,名称随意,这里名称为“DLL_1”

 

目录文件很多,我们暂时无需理会,新建一个cpp文件,这里叫mydll.cpp,输入下列代码

//要导出一个全局函数,就用关键字_declspec(dllexport)来声明
//下边是一个把两个变量相加的函数,相信大家都看得懂
_declspec(dllexport) int add(int a, int b) 
{
	return a + b;
}

 

然后右击这个项目,选择属性。

 

然后设置不适用预编译头

多线程调试(/Mtd)

 

然后编译,在目录Debug下会得到dll和lib两个文件

 

然后新建一个空白项目,把得到的两个文件添加到他的目录内,就像你平时做c++练习一样

这里这个项目叫“DLLAPP”

输入代码

#include <iostream>
#include <Windows.h>

//声明库
#pragma comment(lib,"DLL_1.lib")

//声明,此函数要在dll导入
_declspec(dllexport) int add(int a, int b);

int main()
{
	int a;
	printf("%d\n", add(1, 2));
	system("pause");
	return 0;
}

 

是不是可以使用了呢?

 

笔记中代码均保存到我的网盘下,链接:https://share.weiyun.com/5HMq3Cc

Codejock Xtreme Toolkit Pro 15.3.1 VS2017专用预编译库包(含vc150动态/静态库与完整示例) 专为Visual Studio 2017(VC150工具链)打包的Codejock Xtreme Toolkit Pro 15.3.1开发资源,所有解决方案和项目已直接配置为VS2017平台,支持x86和x64双架构,开箱即用,无需手动调整编译器版本或平台工具集。内含Release版ToolkitPro1531vc150.lib/.dll、Debug版ToolkitPro1531vc150D.lib/.dll,以及静态链接版本ToolkitPro1531vc150S.lib和ToolkitPro1531vc 阅读详情

相关推荐

MFC停靠窗口实战:CDockablePane从创建到控件布局的完整指南(附残影问题排查)

本文提供了MFC中CDockablePane停靠窗口的完整实战指南,涵盖从自定义窗格类创建、主框架集成、内部控件布局到高级功能定制的全过程。针对开发中常见的“残影”视觉问题,文章深入剖析了其根源,并给出了系统性的排查步骤与解决方案,帮助开发者构建稳定、专业的可停靠用户界面。

sun99的博客 614

VS2017开发动态链接库并调试

VS2017开发动态链接库并调试,开发封装自己的SDK

u014291571的博客 3948

Halcon-AOI外观缺陷检测系列

Halcon-AOI外观缺陷检测系列

Jumy_S的博客 1667

VS2017生成一个简单的DLL文件 和 LIB文件——C语言

下面我们将用两种不同的姿势来用VS2017生成dll文件(动态库文件)和lib文件(静态库文件),这里以C语言为例,用最简单的例子,来让读者了解如何生成dll文件(动态库文件) 生成动态库文件 姿势一: 第一步:新建一个项目 第二步:选择Windows桌面向导(这里先不要去管上面的“动态链接库(DLL)”) 第三步:选择动态链接库,并空项目打勾√ ...

weixin_30868855的博客 2657

Python金融数据获取工具库之baostock使用详解

在金融数据分析和量化交易中,获取准确及时的市场数据是非常重要的。baostock是一个专门为中国股市数据提供支持的 Python 库,它提供了免费的股票数据接口,用户可以方便地获取股票、指数、基金等各种金融数据。本文将详细介绍baostock库,包括其安装方法、主要特性、基本和高级功能,以及实际应用场景,帮助全面了解并掌握该库的使用。

Rocky006的博客 5346

原创_新魔百和CM201-1鸿蒙架构当贝乐家语音安卓9线刷固件包刷机教程可救砖rom刷机包

不用担心变砖,因为系统内核会自动判断分区及CPU等级,假设你CPU是高于S905L3的那么。7.adb功能支持,系统增加开机自启功能,添加老人桌面模式,默认为年轻化桌面;所以我发的这个固件可适用于_cw_ys_zg_zn代工上生产的盒子进行刷机;5.CPU及GPU算法更改,当观看4K片源时,AI智能会自动优化系统后台进程,正如我所说,本固件是采用安卓公版镜像制作而成,那么代工厂也是使用的公版镜像,1.移植鸿蒙架构代码,完美融合安卓系统,增加系统的稳定性;刷机的时候 他会自动短接链接,所以不存在变砖。

a138088150的博客 1万+

VS2017静态库和动态库的生成与使用

1、函数声明需要添加 __declspec(dllexport) (__declspec(dllexport)用于Windows中的动态库中,声明导出函数、类、对象等供外面调用,省略给出.def文件。即将函数、类等声明为导出函数,供其它程序调用,作为动态库的对外接口函数、类等),如果不添加 __declspec(dllexport),不会生成.lib文件。2、工程配置为dll,可以在创建工程的时候直接选择创建dll工程,也就可以默认创建好之后再修改为dll工程都可以(记得创建win32控制台应用)**

李白 1540

【人工智能】《Deep Dive into LLMs like ChatGPT 》—— Andrej Karpathy 第三阶段:强化学习(Reinforcement Learning, RL)

摘要:强化学习(RL)阶段通过让模型自主生成并验证答案,突破SFT阶段的模仿局限,使其在数学、代码等领域形成独特的推理路径。RL流程包括批量生成解答、自动批改筛选正确路径,并采用PPO/GRPO算法优化模型。模型会自发涌现自我检查、回滚等策略,显著提升正确率(如AIME竞赛准确率从15%升至56%)。与SFT模型相比,RL模型具备主动链式思维、验算能力,响应时间更长但效果更优,形成真正的“思考模型”。三阶段对比显示,RL通过可验证题的对错奖励机制,赋予模型超越人类范式的推理能力。

奶爸的编程之路,也就一周冷个三天 150

VS2017生成动态库.dll和静态库.lib及其调用

VS2017生成动态库.dll和静态库.lib及其调用步骤1.打开VS2017,新建动态链接库(DLL)![在这里插入图片描述](https://img-blog.csdnimg.cn/20191030105606139.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9...

CyanWang1的博客 2086

【C++】开源:ncurses终端TUI文本界面库

ncurses配置使用(TUI)

DevFrank的博客 3171

华为流程L1-L6业务流程深度细化到可执行【附全文阅读】

该文档主要介绍了华为业务流程的深度细化及相关内容,包括流程框架、建模方法、流程模块描述、流程图建模等,旨在帮助企业构建有效的流程体系,实现战略目标。

cdfunlove的博客 4007

Visual Studio封装静态链接库至新静态库,供程序调用

3-2、将上述两部编译生成的MathLibAdd.lib、MathLib.lib两个静态库文件,及MathLib.h头文件复制至特定目录。在对应的编译模式下,配制VC++目录中的 包含目录、库目录信息,分别添加MathLibAdd库文件的头文件、lib文件目录地址信息。因为A库很大,同时又不想修改太多A库源文件,所以想到了继续封装A库为B静态链接库,然后可以在Qt中调用B库。然后在当前创建的静态库文件下右键点击项目名->属性, 配制静态库依赖。所以,此文便是如何封装静态库,和如何使用静态库调用静态库。

bugtraq的博客 3743

如何通过插值法计算cell delay?

插值法的公式:Z = A + B * X + C * Y + D * X * Y,其中X为input transition,Y为output load,A、B、C、D为四个参数,Z为delay值。从而得到Z=-0.086176 + 11.5493 * x + 0.65917 * y - 24.859 * x * y,当X=0.014930、Y=0.296311时,得到Z=0.1716ns。从而得到A = 0.08075,B = 3.47539,C = 0.04008,D = 0.01648。

芯冰乐 1077

VS2022-动静态库

这里我们先创建两个项目一个是MyLib和一个UsingLib。我们先把 MyLib属性调成静态库(点击项目的属性)之后创建一个.cpp文件mylib.cpp,这里我们就用来写一个加法运算吧!之后我们点击生成。下面这个图的意思是能够快速找到当前项目的文件路径,并不是库的路径!经过一番文件的翻阅我们找到MyLib下的MyLib.lib库---这是我的库路径 D:\Work_Demo\MyLib\x64\Debug之后我们在UsingLib这个库中的库目录-->添加库的路径,应用确认后编译。

m0_73911405的博客 1484

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【linux】动静态库的使用与制作

基础IO

2301_78636079的博客 1155

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

GCC编译过程和Linux的动静态库

因为在Windows下安装了vs这样的集成环境,Linux下安装了gcc这样的编译器,基于这样的环境我们才可以进行编译,编译型语言:安装开发包一定是下载安装的头文件和库文件。

qq_73752525的博客 950

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C/C++ 动态库的创建与加载

C/C++ 动态库的创建与加载

weixin_42297926的博客 599

文件系统(软硬链接 动静态库 动态库加载的过程)

故事:你在学校的宿舍比如是513的2号床(物理地址),学号是111(虚拟地址),线下找你肯定是拿着宿舍的地址找你,校方线上查看档案肯定是拿着学号找。总结动态库加载的过程:可执行程序先加载内存中,运行到需要调用库的地方,如果库不在,就缺页中断,根据路径找到库加载进来,通过映射得到我的库的起始地址,库的地址+偏移量找到方法(函数)。只有物理地址是无法使用的,需要mm_struct中的栈和堆之间开辟一段空间(因为物理内存中已经有库了,所以开辟多少空间的大小也是确定的)填入库的虚拟地址,然后与页表建立映射关系。

2302_78639896的博客 1090

使用vs动静态库生成与调用

注意:1、在生成动态库时,需添加导出函数_delcspce(dllexport),一般紧跟包含文件后,才有生成含有lib的动态库;2、链接库有显示和隐形调用等方法;3、include后用得符号,符号 两种库: •  包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。 •  包

yansmile1的专栏 630

Linux——动静态库的制作和使用超详细(实操+代码+原理介绍)

🍏动态库(Dynamic Library)和静态库(Static Library)是在软件开发中创作和使用

广西彭于晏的博客 859

3、CMake语法:制作和使用动态库和静态库

通常情况下,发布动态库时,.dll 文件是必须的,而.lib 文件和.pdb 文件是否一同发布,取决于具体需求。如果希望其他开发人员在链接时使用该动态库,就需要提供导入库.lib 文件;.pdb 文件主要用于开发和调试阶段,一般在发布给最终用户的产品中不会包含,但在内部测试或给开发人员使用时可能会提供。动态链接库是更推荐的方式,因为它允许更精确的控制和管理链接库的依赖,特别是在大型项目中,它能够避免全局设置可能带来的问题。

qingttqing的博客 1460

Opencv成长之路 1 | Opencv4.2与VS2019永久配置,添加与非添加环境变量,动静态库配置,超详细

Opencv永久配置/动静态库区别/C++dll配置/环境变量配置

a1062484747的博客 1075

VS环境引入rabbitmq-c全过程

windows和linux环境下rabbitmq-c的配置过程

巴塞罗那的风的专栏 2161

Visual Studio 2017编译Lua 5.3.5

下载地址 官方网站:http://www.lua.org/ftp/ 创建项目 静态库 动态库 解释器 编译器

独孤过的博客 991

Linux学习记录——십팔 基础IO(3)

动静态库

kongqizyd146的博客 345

mysql静态编译_VS2015静态编译MYSQL-Connector-C

开发环境123cd C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat amd64# 选择架构:x86 amd64 amd64_x86set PATH=D:\Qt\DevTools\perl\perl\bin;%PATH%# 设置Perl所在路径到环境变量静态编译zlib123cd D:\test\zlib-1....

weixin_30871695的博客 640
下一篇: VS2017 DLL动态库使用教程【二】DLL加载与卸载
崔佳宇_
崔佳宇_ 优质创作者: 嵌入式与硬件开发技术领域 优质创作者: 嵌入式与硬件开发技术领域
博客等级 码龄10年 1万+粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值