visual studio 创建 C/C++静态库和动态库

C/C++中生成动态库和静态库的方法 本文只介绍如在visual studio 2008中生成动态库和静态库的方法。。一、生成动态库(Dynamic-link library)的方法第一步:在新建项目中,应用程序设置中,选择DLL,其他不变 然后右击你的项目文件,选择属性,然后在弹出的属性框中,设置三个地方。1.配置属性-连接器-输出文件 把输出文件名改一下,后缀不要变,例如my.dll 2.配置属性-C/C++-代码生成 找到 阅读详情

一、静态库

1、创建静态库

创建项目:
文件 → 新建 → 项目 → visual c++ → win32程序(项目命名为staticlib) → 下一步→ 静态库(其他默认即可) → 完成

创建头文件:建立一个头文件来对静态库将要导出的函数来进行声明
点击项目staticlib → 右键 → 添加 → 新建项 → visual c++ → 头文件(文件命名为header.h)
在header.h文件中键入:

#pragma once
//因为c++会名称摧毁,所以这里extern 函数时必须制定为C的格式,所以这里加了“C”
extern "C" int add(int a, int b);

创建cpp文件:创建一个c++文件来对静态库将要导出的函数进行定义
点击项目staticlib → 右键 → 添加 → 新建项 → visual c++ → c++文件(文件命名为source.cpp)
在source.cpp文件中键入:

//其中iostream必须在stdafx.h之前引入,否则会出错
#include <iostream>
#include "stdafx.h"
#include "header.h"

int add(int a, int b) {
	return a + b;
}

以上全部完毕后生成解决方案,即可看到这个项目所生成的Lib文件,也就是我们即将调用的Lib文件。

Lib文件具体位置查看:点击visual studio中创建的dll工程 → 右键 → 在文件资源管理器中打开文件夹 → 进入文件夹上一级(就是打开的文件夹所在的文件夹) →(如果你的visual studio的64位模式编译,则这里点击“x64文件”,如果你使用x86模式编译则直接进入下一个箭头) → Debug/Release(这个取决于你刚刚使用visual studio进行编译时选择的debug还是release模式) → 现在相信你就可以看到.lib文件了。注意后面要链接lib库或者dll库就用这里的方法寻找库的具体路径。什么?没看到,那应该你之前的操作步骤出错了,再来一遍吧

2、调用静态库

创建调用项目:
点击本解决方案 → 右键 → 添加 → 新项目 → win32项目(命名为callstaticlib)→ 确定 → 控制台应用程序 → 完成
在callstaticlib.cpp中键入

#include "stdafx.h"
#include <iostream>
// 引入头文件(在导入库时必须引入需要导入的函数的声明,这里如果你掌握不好相对路径,可以使用绝对路径代替,文件夹分隔符注意使用\\)
#include "../staticlib/header.h"
// 链接lib文件,你可以使用绝对路径来导出我们之前生成的lib文件,这里作者一开始编译静态库时使用的debug的x86模式,所以文件夹为../Debug/staticlib.lib,你可以根据上面说到的查找lib文件所在位置的方式,使用lib文件的绝对路径
#pragma comment(lib,"../Debug/staticlib.lib")
using std::cout;
using std::endl;
int main()
{
	int rec = add(6, 8);
	cout << "相加的结果为 " << rec << endl;
	system("pause");
	return 0;
}

3、运行项目:

点击callstaticlib → 右键 → 设为启动项目 → 运行
!!!看,是不是已经可以调用了静态库的函数!!泡杯茶,休息一下,下面开始学习创建动态库以及动态库的调用


二、动态库

1、创建动态库

方法一、通过.def文件

创建项目:
文件 → 新建 → 项目 → visual c++ → win32程序(项目命名为dlllib) → 下一步→ DLL(其他默认即可) → 完成
创建.def文件 :
点击项目dlllib→ 右键 → 添加 → 新建项 → visual c++ → 代码 → 模板定义文件(文件命名为dlllib.def,任意即可)
在dlllib.def文件中键入:

;
; .def文件中注释行以;开头
; 除了注释行外的代码第一行必须以LIBRARY 开头,后面跟着动态库的名字,这里就是动态库工程的名字
; 下面EXPORTS表示导出的方法,这里我们要导出”add”方法,而1表示我们以后再调用的时候还可以使用"1"来进行调用

LIBRARY "dlllib"
EXPORTS 
	add @1

创建cpp文件 :
点击项目dlllib→ 右键 → 添加 → 新建项 → visual c++ → c++文件(文件命名为source.cpp,任意即可)
然后在source.cpp中键入

#include "stdafx.h"
#include <iostream>
int add(int a, int b) {
	std::cout << "动态库被调用了" << std::endl;
	return a + b;
}

即生成dll和lib文件

方法二、通过_declspec(dllexport)导出

创建项目:
文件 → 新建 → 项目 → visual c++ → win32程序(项目命名为dlllib) → 下一步→ DLL(其他默认即可) → 完成

创建头文件:建立一个头文件来对动态库将要导出的函数来进行声明
点击项目dlllib→ 右键 → 添加 → 新建项 → visual c++ → 头文件(文件命名为header.h)
在header.h文件中键入:

extern "C" _declspec(dllexport) int add(int a, int b);

创建cpp文件:创建一个c++文件来对动态库将要导出的函数进行定义
点击项目dlllib→ 右键 → 添加 → 新建项 → visual c++ → c++文件(文件命名为source.cpp,任意即可)

#include "stdafx.h"
#include "header.h"
#include <iostream>
using namespace std;
int add(int a, int b) {
	cout << "dll被调用了"<<endl;
	return a + b;
}

2、调用动态库

方法一、隐式调用

创建调用项目:
点击本解决方案 → 右键 → 添加 → 新项目 → win32项目(命名为calldll)→ 确定 → 控制台应用程序 → 完成
链接动态库:在stdafx.h中键入

// #pragma comment(lib,"这里写上创建dll库时dll文件夹中生成的lib库")
#pragma comment(lib,"G:\\programming language\\cpp\\practice\\visual studio\\dlllib\\Debug\\dlllib.lib")
//声明
_declspec(dllimport) int add(int a, int b);

在calldll.cpp中键入

#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
	int rec = add(7, 8);
	cout << "相加的结果为 " << rec << endl;
	system("pause");
	return 0;
}

执行调用项目:
点击calldll→ 右键 → 设为启动项目 → 运行

方法二、显式调用

创建调用项目:
点击本解决方案 → 右键 → 添加 → 新项目 → win32项目(命名为calldll)→ 确定 → 控制台应用程序 → 完成
在calldll.cpp中键入

#include "stdafx.h"
#include <iostream>
//定义一个函数指针(返回值为int,参数值为两个int)
typedef int(*ADD_FUNC)(int a, int b);
using namespace std;
//动态调用
int main()
{
	//""里面写上dll文件路径,注意显式调用时使用lib的路径
	HMODULE hmod = LoadLibrary(_T("G:\\programming language\\cpp\\practice\\visual studio\\dlllib\\Debug\\dlllib.dll"));
	if (hmod) {
		ADD_FUNC add_fp = (ADD_FUNC)GetProcAddress(hmod, "add");
		if (add_fp) {
			int rec = add_fp(10, 5);
			cout << "相加的结果为 " << rec << endl;
		}
		FreeLibrary(hmod);
	}
	system("pause");
	return 0;
}

并且因为我们要使用GetProcAddress,所以我们要在stdafx.h中引入windows头文件#include <Windows.h>

3、执行调用项目

点击calldll→ 右键 → 设为启动项目 → 运行

如何用VS2019创建并调用动态库 网上查了相关资料,创建动态库主要有两种方式,一种是通过空项目创建动态库,一种是直接创建动态链接库,本文所总结的就是第二种,直接创建动态链接库。 阅读详情

相关推荐

如何使用minGW和SMVC两种方法编译.dll动态库和.lib静态库

MinGW编译器的全称是 Minimalist GNU for Windows。它提供了一个开发环境,使开发者可以在Windows上编写、编译和调试使用C、C++、Fortran等语言编写的程序,MinGW的核心是GCC编译器。SMVC编译器的全称是 Simple Model-View-Controller,使用PHP框架,是Visual Studio软件中常用的编译方法。一般使用minGW编译出的动态库和静态库格式分别为.dll和.dll.a;

XJ_75的博客 2690

Visual Studio 引入外部静态库与动态库

windows 下visual studio dll lib配置

qq_52179126的博客 7956

VisualStudio2019构建C/C++静态库和动态库(dll)(文末附源码)

文章目录1. 静态库和动态库1.1. 静态链接库1.1. 动态链接库2. 使用VisualStudio构建演示2.1. 静态库构建演示2.2. 动态库构建演示3. 总结 1. 静态库和动态库 1.1. 静态链接库 举个例子,假如你在编写一个C++工程,根据业务逻辑,这个工程需要用到一些工具类,例如集合操作的工具类(暂且叫他collection_utils),于是你直接定义一个collection_utils.h头文件和一个collection_utils.cpp文件,在头文件中写一些工具函数的定义,在cpp

张凯 1万+

VS2015 C++ lib静态库的制作以及调用

1 打开vs2015,新建win32应用程序,选择静态库并取消预编译头。 2 接下来进入静态库工程目录,将Debug模式改为Release模式,在属性页-C++的代码生成选择MT或者MTD,在库管理器(管理员)中可以引入导入的第三方库的库目录和附加依赖项,然后将链接库依赖项由否改为是,引入第三方库后肯定要指定头文件目录,所以需要在C++里指定头文件目录。接下来就可以开始编写静态库了。 3 在解决......

Keras深度学习 9万+

Visual Studio引入外部库 ---- 弄懂静态库lib和动态库dll

这两天由于想要研究一下socket的相关内容,但是没想到引入外部库还有这么多门道。 根据维基百科定义:一个现代编译器的主要工作流程如下:源代码(source code)→ 预处理器(preprocessor)→ 编译器(compiler)→ 汇编程序(assembler)→ 目标代码(object code)→ 链接器(linker)→ 可执行文件(executables),最后打包好的文件就可以...

一串代码的博客 8338

VS中C++静态/动态库文件的编译调试与使用

基础知识: 不同语言之间可以通过调用动态链接库 (dll)来调用别人写好的函数 同一语言可以调用别人写好的静态(lib)库 静态链接库:是通过静态联编的,在链接时,link将自己的(.obj)二进制文件和别人的lib文件一起共同生成.exe文件。 静态链接库的缺点是: 1)比较吃内存 2)生成的exe文件大 3)升级不方便 动态链接库:是将自己生成的EXE程序和需要调用的D

mazi的博客 9037

静态库、动态库原理及使用

参考:1.带你玩转Visual Studio——带你发布自己的工程库 2.VisualStudio2019 DLL生成并使用教程(C++)最详细Demo教程 什么是程序库? 程序库是写好的,成熟的,可以复用的可执行代码集的二进制形式,可以被操作系统载入内存,被别的程序调用执行。比如STL(Standard Template Library)。 C/C++的程序库有两种:...

技术日志 839

从零开始用飞牛fnas搭建集成DeepSeek-R1的远程AI工作台

从零开始用飞牛fnas搭建集成DeepSeek-R1的远程AI工作台

AI+全栈,AI+应用,实操落地,前沿技术 3805

OPC Client第2讲:Visual Studio的C/C++使用教程;C++程序运行过程的各个文件;如何导入库?{静/动态库;更便捷的方法添加第三方库:使用属性表【配置使用wxwidgets】}

Visual Studio的C/C++使用教程;C++程序运行过程的各个文件;如何导入库?{静/动态库;更便捷的方法添加第三方库:使用属性表【配置使用wxwidgets】}

weixin_54966200的博客 1328

浏览器Cookie迁移实战:从Chrome导出导入登录态全攻略

Cookie是浏览器保存的会话凭证,服务端通过Set-Cookie将登录态种在本地。迁移Cookie本质上是把服务端认可的会话标识搬到新环境,从而免去重复输入账号密码和二次验证的麻烦。在换电脑、切浏览器或重装系统时,掌握Cookie的导出导入技术能显著提升效率。Chrome与Edge同属Chromium内核,存储结构相似,但字段差异(如Domain、SameSite、Secure)常导致迁移失败。通过浏览器扩展或CDP脚本可实现跨浏览器登录态迁移,适用于内网后台、开发环境等场景。本文从原理到实践,梳理Coo

weixin_42533120的博客 338

代码实现 —— 基于 STM32 的可见光通信系统课程设计

基于STM32F103ZET6,源码如需移植,需要修改定时器捕获通道引脚,及定时器,如果你也有这个课设任务,希望对你有所帮助。

不善挽留 1万+

VS2019构建C/C++静态库和动态库(转载)

​转载自:https://www.jb51.net/article/208240.htm

Mason___的博客 1283

从零开始:使用CMake构建GreenHills RH850项目的完整工作流(2018.1.5版)

本文详细介绍了如何从零开始使用CMake构建GreenHills RH850嵌入式项目的完整工作流。通过编写工具链文件、定义CMakeLists.txt,实现自动化、可维护的跨平台构建,有效解决了传统IDE在多模块、持续集成场景下的局限性,显著提升团队协作效率和项目可维护性。

weixin_28839699的博客 130

windows中建立静态链接库与动态链接库

在C/C++中经常需要用到静态链接库和动态链接库。为了了解什么是静态链接库和动态链接库,我们首先需要了解什么是库。由于经常有许多代码需要重复利用,库就是指创建一种文件里面包含了很多函数和变量的目标代码,链接的时候只要把这个文件指示给链接程序就自动地从文件中查找符合要求的函数和变量进行链接。而静态链接库是指目标的代码只能进行静态的链接,静态链接库的结构比动态链接库简单,只是将所...

weixin_34248705的博客 105

TC3XX - MCAL知识点(三十七):AURIX™ TC3xx 的BootLoader烧录APP完成之后跳转使多个核均正常运行

摘要:针对AURIX TC3xx多核芯片在软件复位后仅Core0能启动的问题,分析发现该芯片在Cold Power-on Reset(断电复位)时会完整执行多核启动流程,而Application Reset(软件复位)会跳过从核初始化。解决方案包括:1)在BootLoader中显式调用IfxCpu_startCore()函数启动其他核;2)通过跳转函数强制各核从指定地址启动;3)双Boot场景下让每个核独立响应复位命令。实测表明,软件复位后需手动触发从核启动,或采用断电复位方式确保所有核正常初始化。

梦想技术家 408

21、汽车喷漆目标区域识别:机器学习与深度学习的应用

本文探讨了机器学习与深度学习在汽车喷漆目标区域识别中的应用,重点利用卷积神经网络(CNN)提高喷漆效率并减少油漆浪费。通过构建和预处理包含多种汽车类型的数据集,采用ResNet-18、ResNet-50和MobileNet-v2等模型进行训练与评估,结果表明ResNet-50在准确率和鲁棒性方面表现最佳。研究还分析了数据裁剪、标签处理、网络架构差异以及光照和遮挡对识别效果的影响,并提出了系统实现流程。最后,文章展望了多传感器融合、模型优化和场景适应性等未来研究方向,为智能化喷漆工艺提供了技术参考。

5b6n7m8的博客 101

Visual Studio 2022静态库与动态库创建及使用完全指南

在C++开发中,库(Library)是代码复用的重要方式。本教程将详细介绍如何在Visual Studio 2022中创建和使用静态库(.lib)和动态库(.dll),每种库类型都会有完整的创建步骤和实际示例。

yy_xzz的博客 4535

手把手教你学Simulink——基于Simulink的无感FOC(滑模观测器+PLL)实战

摘要: 本文详细介绍了基于Simulink的无感FOC(滑模观测器+PLL)实现方法。主要内容包括:1)SMO+PLL原理,通过滑模观测器估算反电动势,结合PLL抑制抖振;2)系统架构,替代编码器信号;3)Simulink建模流程,涵盖Clarke变换、SMO离散化实现、PLL设计等关键步骤;4)参数整定指南和工程实践要点,如启动策略和故障处理。该方法具有成本低、可靠性高的优势,适用于家电、电动车等场景,仿真结果显示角度误差±5°,速度动态跟随良好。文章还提供了调试建议和常见问题解决方案。

MHD0815的博客 136

Visual studio那些破事。。。(生成静态库、生成动态库、引用静态库、引用动态库)

文章目录1、导出静态库.lib(add.lib)2、导出动态库.dll(multi.dll)3、静态库.lib的引用(引用1生成的add.lib)还是在项目,属性中设置:将需要调用的.lib文件的头文件所在的路径复制到附加包含目录中:将所要链接的.lib文件所在的目录,添加到项目属性-->链接器-->常规-->附加库目录中:将add.lib文件的文件名复制到链接器-->输入-->附加依赖项中:代码:然后生成解决方案:生成了可执行文件,vs中运行程序,结果正确4、动态库的.dll

Dontla的博客 3509

BMS硬件设计核心:安全、精度与EMC的工程平衡

电池管理系统(BMS)是保障锂电安全运行的关键嵌入式子系统,其本质是在高精度模拟测量、实时故障响应与复杂电磁环境适应性之间达成工程平衡。原理上,BMS依赖专用监测芯片(如BQ76920)实现微秒级硬件保护,结合主控MCU(如STM32)完成策略决策与通信管理,形成‘安全协处理器+智能主控’双架构。技术价值体现在对过压/欠压/过流/温度等多维故障的毫秒级闭环处置能力,支撑SOC/SOH估算可信度与系统鲁棒性。典型应用场景涵盖电动工具、轻型电动车及储能模块等中低串数电池组。本文聚焦BMS控制板在时钟布局、电源滤

weixin_30591519的博客 69

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

visual studio 2015 编写C++ 静态库和动态库、调用静态库和动态库

3.3 引入DLLDemo.lib符号文件(这个lib文件就在DLLDemo.dll同级目录下,和DLLDemo.dll同时生成的)3.3 在“practice”项目中包含静态库头文件所在的目录,防止代码中包含头文件时出错。3.2 在“practice”项目中包含动态库头文件所在的目录,防止代码中包含头文件时出错。3.2 在“practice”项目中引用StaticLibDemo.lib静态库。点击生成,可以看到已经生成了DLLDemo.dll动态库,如下图所示。1.3 如下图所示选择静态库。

读书札记2022的博客 1313

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Visual studio创建C/c++静态库

一、静态库

yalipf的博客 1900

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++ 静态库/动态库创建与调用(Visual Studio)

目录 一、创建静态库 二、调用静态库 方式一 方式二 三、创建动态库 四、调用动态库 方式一:隐式调用 方式二:显示调用 一、创建静态库 1、打开VS2015——新建项目 2、选择命名为TestStaticLib 3、设置选项并点击完成 4、TestStaticLib.h #pragma once class TestStaticLib { pub...

1201

静态库和动态库的区别以及在C/C++中的调用方法

静态库(.lib)和动态链接库(.dll)是在Visual Studio(VS)中开发和构建应用程序时使用的两种不同类型的库文件,它们在应用程序开发中有不同的用途和特性。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 5362

Visual Studio 中的 /MD 与 /MT、动态库与静态库的深入解析

MD 与 /MT/MD 动态链接 CRT,生成的文件体积较小,但存在对外部运行时库的依赖,需要目标系统安装相应的运行时库。/MT 静态链接 CRT,生成的文件独立运行,无需额外的运行时库依赖,但文件体积较大。动态库与静态库静态库将代码嵌入到可执行文件中,具有很强的独立性,适合自包含的程序,但更新库时需要重新编译程序。动态库在运行时加载,多个程序可以共享,文件体积小,便于更新,但存在对外部 DLL 文件的依赖,可能会出现版本冲突问题。实践建议。

码事漫谈 2243

Windows下使用静态库和动态库

Windows下使用静态库和动态库

上善若水 1万+
上一篇: ESC ubuntu16.04 ipv6配置
下一篇: 使用python连接远程服务器的mysql
菜鸟方圆圆
博客等级 码龄10年 26粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值