动态链接库、静态库区别 ,VS2005项目相关设置

动态链接库、静态库区别与VS2005项目相关设置 立即下载

一、动态链接库、静态库区别

二、VS2005项目相关设置

三、#pragma预处理指令

动态链接库、静态库区别

1、动态链接库(Dynamic Linked Library) Windows系统平台上你可以将独立的程序模块创建为较小的DLL(Dynamic Linkable Library)文件,并可对它们单独编译和测试。在运行时,只有当EXE程序确实要调用这些DLL模块的情况下,系统才会将它们装载到内存空间中。这种方式不仅减少了EXE文件的大小和对内存空间的需求,而且使这些DLL模块可以同时被多个应用程序使用。Windows自己就将一些主要的系统功能以DLL模块的形式实现。Windows为应用程序提供了丰富的函数调用,这些函数调用都包含在动态链接库中。其中有3个最重要的DLL,Kernel32.dll,它包含用于管理内存、进程和线程的各个函数;User32.dll,它包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数;GDI32.dll,它包含用于画图和显示文本的各个函数。 在使用动态链接库的时候,往往提供两个文件:一个引入库(Import Library)和一个DLL。引入库包含被DLL导出的函数和变量的符号名,DLL包含实际的函数和数据。在编译链接可执行文件时,只需要链接引入库,DLL中的函数代码和数据并不复制到可执行文件中,在运行的时候,再去加载DLL,访问DLL中导出的函数。 一个Windows的.EXE文件拥有它使用不同动态链接库的引用,所使用的函数即在那里。当Windows程序被加载到内存中时,程序中的调用被指向DLL函数的入口,如果DLL不在内存中,系统就将其加载到内存中。当链接Windows程序以产生一个可执行文件时,你必须链接由编程环境提供的专门的“导入库(import library)库”。这些导入库包含了动态链接库名称和所有Windows函数调用的引用信息。链接程序使用该信息在.EXE文件中构造一个表,当加载程序时,Windows使用它将调用转换为Windows函数。

 2、静态库(Static Library) 函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其它模块组合起来创建最终的可执行文件(.EXE文件)。 导入库和静态库的区别很大,他们实质是不一样的东西。静态库本身就包含了实际执行代码、符号表等等,而对于导入库而言,其实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息。 静态链接与动态链接: 静态链接方法:#pragma comment(lib, "test.lib") ,静态链接的时候,载入代码就会把程序会用到的动态代码或动态代码的地址确定下来静态库的链接可以使用静态链接,动态链接库也可以使用这种方法链接导入库 动态链接方法:LoadLibrary()/GetProcessAddress()和FreeLibrary(),使用这种方式的程序并不在一开始就完成动态链接,而是直到真正调用动态库代码时,载入程序才计算(被调用的那部分)动态代码的逻辑地址,然后等到某个时候,程序又需要调用另外某块动态代码时,载入程序又去计算这部分代码的逻辑地址,所以,这种方式使程序初始化时间较短,但运行期间的性能比不上静态链接的程序。VS2005项目相关设置 应用程序使用外部库时需要进行加载,两种库的加载本质上都是一样:提供功能和功能的定义!vs2005 c++ 项目设置外部库方法如下: 1. 添加编译所需要(依赖)的 lib 文件 在“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,多个 lib 以空格隔开,等同于“#pragma comment(lib, "*.lib") ”语句。 2. 添加库(libs)文件目录 方法 1:项目->属性->配置属性->连接器->常规->附加库目录” 方法 2:[菜单]“工具->选项->项目和解决方案->c++ 目录”,选择对应平台,然后添加所需“库文件”目录 这个设置类似于设置环境变量,主要是为程序设置搜索的库目录,真正进行库加载还需要进行第一种设置!

3. 添加包含(include)文件目录

方法 1:“项目->属性->配置属性->c/c++->常规->附加包含目录”

方法 2:[菜单]“工具->选项->项目和解决方案->c++ 目录”,添加所需“包括文件”目录 方法2类似于设置环境变量。

 4. 导入库(import) 在“项目->属性->配置属性->连接器->高级->导入库”填写需要生成的导入库

#pragma预处理指令 在所有的预处理指令中,#pragma指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。   其格式一般为: #Pragma Para   其中Para 为参数,下面来看一些常用的参数。  

 1、message 参数。 Message 参数能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:   #Pragma message(“消息文本”)   当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。   

  2、另一个使用得比较多的pragma参数是code_seg。格式如:   #pragma code_seg( ["section-name"[,"section-class"] ] )   它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它。   

  3、#pragma once (比较常用)   只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在VC6中就已经有了,但是考虑到兼容性并没有太多的使用它。   #pragma once是编译相关,就是说这个编译系统上能用,但在其他编译系统不一定可以,也就是说移植性差,不过现在基本上已经是每个编译器都有这个定义了。    4、#pragma warning( disable : 4507 34; once : 4385; error : 164 )   等价于:   #pragma warning(disable:4507 34) // 不显示4507和34号警告信息   #pragma warning(once:4385) // 4385号警告信息仅报告一次   #pragma warning(error:164) // 把164号警告信息作为一个错误。   同时这个pragma warning 也支持如下格式:   #pragma warning( push [ ,n ] )   #pragma warning( pop )   这里n代表一个警告等级(1---4)。   #pragma warning( push )保存所有警告信息的现有的警告状态。   #pragma warning( push, n)保存所有警告信息的现有的警告状态,并且把全局警告等级设定为n。   #pragma warning( pop )向栈中弹出最后一个警告信息,  在入栈和出栈之间所作的一切改动取消。例如:   #pragma warning( push )   #pragma warning( disable : 4705 )   #pragma warning( disable : 4706 )   #pragma warning( disable : 4707 )   //.......   #pragma warning( pop )   在这段代码的最后,重新保存所有的警告信息(包括4705,4706和4707)。   

  5、#pragma comment(...)   该指令将一个注释记录放入一个对象文件或可执行文件中,常用的lib关键字,可以帮我们连入一个库文件。该指令的格式为 #pragma comment( "comment-type" [, commentstring] ) 该指令将一个注释记录放入一个对象文件或可执行文件中,comment-type(注释类型):可以指定为五种预定义的标识符的其中一种五种预定义的标识符为: compiler:将编译器的版本号和名称放入目标文件中,本条注释记录将被编译器忽略,如果你为该记录类型提供了commentstring参数,编译器将会产生一个警告,例如:#pragma comment( compiler )。 exestr:将commentstring参数放入目标文件中,在链接的时候这个字符串将被放入到可执行文件中,当操作系统加载可执行文件的时候,该参数字符串不会被加载到内存中.但是,该字符串可以被dumpbin之类的程序查找出并打印出来,你可以用这个标识符将版本号码之类的信息嵌入到可执行文件中。 lib:这是一个非常常用的关键字,用来将一个库文件链接到目标文件中常用的lib关键字,可以帮我们连入一个库文件。例如: #pragma comment(lib, "user32.lib"), 该指令用来将user32.lib库文件加入到本工程中。 linker:将一个链接选项放入目标文件中,你可以使用这个指令来代替由命令行传入的或者在开发环境中设置的链接选项,你可以设定/include选项来强制包含某个对象。

AMD 3D V-Cache技术解析:CPU缓存堆叠如何突破性能瓶颈 在半导体领域,缓存(Cache)是提升处理器性能的关键技术,其核心原理是在高速CPU核心与慢速主存之间建立数据中转站,以缓解“内存墙”问题。随着摩尔定律放缓,传统平面扩展缓存面临面积成本高、延迟增加等挑战。3D封装技术应运而生,通过垂直堆叠实现极致的互联密度与带宽,成为突破性能瓶颈的重要工程路径。这项技术的价值在于能以更优的功耗和延迟,显著提升缓存容量,从而改善游戏、科学计算等数据密集型应用的性能。以AMD 3D V-Cache为代表的Hybrid Bonding(混合键合)工艺,正是这一趋势的典型实践,它 阅读详情

相关推荐

避坑指南:ANSYS流固耦合计算中System Coupling数据传递设置与常见报错解决

本文深入解析ANSYS Workbench中System Coupling模块在双向流固耦合(FSI)计算中的应用,详细讲解数据传递机制、典型报错解决方案及高阶调试技巧。通过实际案例展示如何优化耦合步长、处理大变形问题,并提升并行计算效率,帮助工程师有效规避常见技术陷阱。

weixin_29213525的博客 730

详谈静态库和动态库的区别

StaticLibrary.lib的大小为190KB,DynamicLibrary.lib的大小为3KB,静态库对应的lib文件叫静态库,动态库对应的lib文件叫【导入库】。动态库的好处是,不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例。Linux下使用静态库,只需要在编译的时候,指定静态库的搜索路径(-L选项)、指定静态库名(不需要lib前缀和.a后缀,-l选项)。如果引用的静态库不是在同一解决方案下的子工程,而是使用第三方提供的静态库lib和头文件,上面的方法设置不了。...

weixin_71478434的博客 1万+

MCGS触摸屏Modbus TCP通讯实战:从寄存器写入到字符串处理的完整代码解析

本文详细解析了MCGS触摸屏通过Modbus TCP协议实现寄存器写入和字符串处理的完整代码,涵盖单寄存器写入、多寄存器写入及字符串传输等核心技术。文章还提供了MCGS组态环境中的实战配置步骤和常见问题排查方法,帮助开发者快速掌握工业自动化通讯的关键技术。

study的专栏 755

静态库与动态库的区别与优缺点

一、什么是库 库是写好的,现有的,成熟的,可以复用的代码。本质上来说,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。所谓静态、动态是指链接。 库文件是事先编译好的方法的合集。 二、静态库与动态库的区别 1、静态库的扩展名一般为“.a”或“.lib”;动态库的扩展名一般为“.so”或“.dll”。 2、静态库在编译时会直接整合到目标程序中,编译成功的可执行文件可独立运行;动态库在编译时不会放到连接的目标程序中,即可执行文件

weixin_51483516的博客 2万+

A*(star)算法原理讲解以及程序实现(基于Python)

本文将以迷宫探索最优路径为例,讲解A *搜索算法原理及其程序实现。在原理讲解部分,首先从为什么要使用A *搜索算法和A *搜索算法的全局最优逻辑出发,讲解A *算法的原理。其次对A *的行动函数g(n)和启发函数h(n)的细节进行了讲解说明,并补充了启发函数的选择对于A *算法的影响。在程序实现部分,首先从程序流程框图出发,解释A *算法的流程。其次按函数的类划分并讲解主要代码,接着展示程序的运行结果,最后对A *算法进行总结分析。

m0_73366745的博客 8282

OAI数据集申请下载全攻略:从个人NDA账号注册到数据包下载的保姆级避坑指南

本文提供OAI数据集申请下载的完整指南,涵盖从个人NDA账号注册到数据包下载的全流程。重点解析login.gov验证陷阱、浏览器兼容性问题、NDA权限申请技巧及nda-tools高效使用方法,帮助医学影像研究者避开常见技术障碍,快速获取全球骨关节炎研究数据库OAI的宝贵数据资源。

weixin_28698059的博客 752

在vs2005中使用静态链接库和动态链接库

静态链接库: 首先,静态链接库的使用需要库的开发者提供生成库的.h头文件和.lib文件。生成库的.h头文件中的声明格式如下:     extern "C" 函数返回类型 函数名(参数表);     在调用程序的.cpp源代码文件中如下:     #include "..\lib.h"     #pragma comment(lib,"..\\debug\\libTest.lib") //

startwithdp的专栏 3770

多角度模板匹配的模板创建技巧

基于形状的模板匹配多角度创建技巧

manuoo的专栏 3403

vs2005中动态i链接库DLL的一个简单例子

在vs2005中对动态链接库做实验,来一个详细的能跑通的例子: 1、打开vs2005,文件-》新建-》项目,选择“win32项目”,在“名称”中输入“vsdll ”,点“确定”-》下一步,在“应用程序设置”的“应用程序类型”中选择“DLL”,“附加选项”中选择“空项目”,然后点“完成”。这样dll项目就建立起来了。 2、在建好的工程中“源文件”右键“添加新项”,选择“c++文件”,输入名字“v

chen825919148的专栏 3706

RK3588部署YOLOv11与RKNN全流程教程

本文详细介绍了在RK3588开发板上部署YOLOv11目标检测模型的全流程。主要内容包括:PC端CUDA/cuDNN环境配置、Anaconda虚拟环境搭建、RKNN Toolkit2安装;YOLOv11模型从PyTorch到ONNX再到RKNN的格式转换;以及RK3588开发板的系统配置、RKNPU驱动安装和最终推理实现。教程提供了完整的代码示例,帮助开发者快速在边缘设备上实现高效的AI推理应用,涵盖从环境准备到实时检测的全套解决方案。

FJN110的博客 376

Claude Code 完全指南:从入门到精通

《AI编程助手ClaudeCode深度指南》摘要 ClaudeCode作为新一代AI编程助手,凭借200K tokens的超长上下文窗口和深度代码理解能力,正在重塑开发工作流程。本文系统介绍了从安装配置到高级应用的完整使用指南: 核心优势包括: 项目级代码理解能力 Agent自主规划复杂任务 原生终端集成支持 多文件协同编辑功能 实战应用场景: 快速理解陌生项目架构 诊断性能瓶颈并提供优化方案 自动生成符合规范的API代码 开发可复用技术组件 高级技巧: 通过CLAUDE.md定义项目规范 合理使用/cle

分享AI、区块链技术及应用,未来已来 604

动态链接库、静态库区别与VS2005项目相关设置动态链接库、静态库区别

动态链接库、静态库区别与VS2005项目相关设置动态链接库、静态库区别       1、动态链接库(Dynamic Linked Library)       Windows系统平台上你可以将独立的程序模块创建为较小的DLL(Dynamic Linkable Library)文件,并可对它们单独编译和测试。在运行时,只有当EXE程序确实要调用这些DLL模块的情况下,系统才会将它们装载到内存空间

227

第四章节 Qt字符串QString详解

QString 的使用方式和 C++标准库的 std::string 字符串的非常相似。

m0_65635427的博客 890

动态链接库、静态库区别与VS2005项目相关设置 .

一、动态链接库、静态库区别      二、VS2005项目相关设置      三、#pragma预处理指令   动态链接库、静态库区别       1、动态链接库(Dynamic Linked Library)       Windows系统平台上你可以将独立的程序模块创建为较小的DLL(Dynamic Linkable Library)文件,并可对它们单独编译和测试。在运行时,只有当

philips的专栏 876

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

动态链接库、静态库区别与VS2005项目相关设置(转载)

<br />动态链接库、静态库区别<br />      1、动态链接库(Dynamic Linked Library)<br />      Windows系统平台上你可以将独立的程序模块创建为较小的DLL(Dynamic Linkable Library)文件,并可对它们单独编译和测试。在运行时,只有当EXE程序确实要调用这些DLL模块的情况下,系统才会将它们装载到内存空间中。这种方式不仅减少了EXE文件的大小和对内存空间的需求,而且使这些DLL模块可以同时被多个应用程序使用。Windows自己就将一些

To be code... 1037

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【转】动态链接库、静态库区别与VS2005项目相关设置

转自:http://blog.youkuaiyun.com/Ocean2006/article/details/5289908 一、动态链接库、静态库区别 二、VS2005项目相关设置 三、#pragma预处理指令 动态链接库、静态库区别 1、动态链接库(Dynamic Linked Library) Windows系统平台上你可以将独立的程序模块创...

weixin_30462049的博客 86

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

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

(2012.04.13)动态链接库、静态库区别与VS2005项目相关设置

一、动态链接库、静态库区别      二、VS2005项目相关设置      三、#pragma预处理指令 动态链接库、静态库区别       1、动态链接库(Dynamic Linked Library)       Windows系统平台上你可以将独立的程序模块创建为较小的DLL(Dynamic Linkable Library)文件,并可对它们单独编译和测试。在运行时,只有当EXE

Neicole ~~ 学习旅程(大学) 1462

VS下生成C程序静态库(LIB)及动态库(DLL)的方法

一、前言 工作中有时候因为分工合作的原因需要让别人调用自己写的代码去完成某项功能,但是又不想让别人看到具体的实现过程,只是提供一个API形式的接口供别人调用;又或者是其他的一些原因,有必要学习静态库及动态库的相关知识,本文大多数内容均为参考网上资料后的整理,作为学习的总结。 二、DLL与LIB文件的区别 lib是一个二进制文件,与dll类似,供其他程序调用。lib与dll的区别是:dl...

心城追梦的博客 9874

关于静态链接库与动态链接库的区别和实例

所谓静态链接库(Static Link Library),是在编译的链接阶段将库函数嵌入到应用程序的内部。但是如果多次调用,则该库函数会被调用多次,会极大的造成空间浪费以及链接器的负担(缺点)。它的优势在于,应用程序可以独立运行,因为在静态链接的时候已经将所需的组件都已经加载到了该应用程序中,不需要对应的DLL,但是应用程序比较大。 所谓动态链接库(Dynamic link library),与静...

Alan_Program的博客 3446

DLL in VS2005

一、动态链接库、静态库区别 1、动态链接库(Dynamic Linked Library)       Windows系统平台上你可以将独立的程序模块创建为较小的DLL(Dynamic Linkable Library)文件,并可对它们单独编译和测试。在运行时,只有当EXE程序确实要调用这些DLL模块的情况下,系统才会将它们装载到内存空间中。这种方式不仅减少了EXE文件的大小和对内存空

没难度、有态度、不泄气、不放弃 809

c语言将程序写为动态库,VS下生成C程序静态库(LIB)及动态库(DLL)的方法

一、前言工作中有时候因为分工合作的原因需要让别人调用自己写的代码去完成某项功能,但是又不想让别人看到具体的实现过程,只是提供一个API形式的接口供别人调用;又或者是其他的一些原因,有必要学习静态库及动态库的相关知识,本文大多数内容均为参考网上资料后的整理,作为学习的总结。二、DLL与LIB文件的区别lib是一个二进制文件,与dll类似,供其他程序调用。lib与dll的区别是:dll是运行时需要的,...

weixin_36327991的博客 1165

动静态链接库解析

动态链接库、静态库区别与VS2005项目相关设置      一、动态链接库、静态库区别     二、VS2005项目相关设置     三、#pragma预处理指令 动态链接库、静态库区别      1、动态链接库(Dynamic Linked Library)       Windows系统平台上你可以将独立的程序模块创建为较小的DLL(Dynamic Linkable Library)文件,并可

xiaoyaoziqing的专栏 1874
上一篇: 开机启动故障(硬件)分析
下一篇: 基于X的GNOME、GTK、GDK、GLib<Xlib>Xt,Xm,Motif-等之间的关系
极杰子
博客等级 码龄15年 41粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值