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

STC8H开发(十六): GPIO模拟SPI驱动Ci24R1实现低成本无线遥控 本文详细介绍了如何使用STC8H单片机通过GPIO模拟SPI驱动Ci24R1无线模块,实现低成本无线遥控方案。内容涵盖硬件设计要点、软件驱动开发技巧及实战优化经验,特别适合消费电子产品开发者参考。Ci24R1凭借其高性价比和双模协议支持,成为替代传统nRF24L01+的理想选择。 阅读详情

原文地址:http://hi.baidu.com/dingcaiwei/item/f13aee9c527d42c9b6253175

动态链接库、静态库区别

      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选项来强制包含某个对象。

一文让你轻松理解Wi-Fi理论速率计算方式 如上所示,在使用FDM的802.11协议上,最小子载波带宽为312.5KHz,那一个信道频宽为20MHz的信道可以分成64个子载波,但是由于技术原因,有效使用的是52个子载波,实际用于数据传输的只有48个,有4个子载波充当导频载波。载波:交流信号或者直流信号本身不具备数据传输能力,但是如果信号发生很小的波动或者变化,从而实现数据的收发。所谓子载波,就是将信号划为为很多的小信道,这些小信道可以实现数据的并发传输,子载波我们英文称为subcarrier,也称为音调(tone)。Symbol time如下所示。 阅读详情

相关推荐

Unity跨平台存储避坑指南:persistentDataPath权限真相

Application.persistentDataPath是Unity中用于持久化数据的核心路径,表面提供跨平台抽象,实则底层访问机制因操作系统而异。其原理并非简单路径映射,而是受Android Scoped Storage、iOS Data Protection、Windows组策略及macOS隐私权限等多层安全模型动态约束。技术价值在于保障用户数据长期可靠存储,但若忽略平台差异,极易引发‘本地正常、真机崩溃’‘iOS可存、Android报错’等线上事故。典型应用场景包括游戏存档、离线缓存、自定义资源包

weixin_32073537的博客 350

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

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

startwithdp的专栏 3770

AD(AltiumDesigner)封装导入allegro生成allegro封装

AD(AltiumDesigner)封装导入allegro生成allegro封装 貌似PCB的封装问题是一个无尽话题,为了简单我总是想找捷径(主要还是太懒了),因为也是近期才开始学习使用allegro进行PCB设计,在最近的一个设计中,很多器件封装allegro中都没有,一个一个画感觉很费时间,但是在AD(AltiumDesigner)的封装库中是有的,于是便想着AD的封装库能不能倒入到alleg...

yangh2560的博客 2万+

VS 生成动态链接库 方法

动态链接库(DLL) DLL 通常不能直接运行、也不能接收消息; 一般将某种功能的函数放在一个动态链接库中,然后提供给其他程序调用; 像WindowsAPI的所有函数都包含在DLL中,其中有3个DLL 最重要: 分别是: 1.Kernel32.dll:用于内存管理、创建进程线程; 2.User32.dll:用于执行用户界面任务,创建窗口、消息传递等; 3.GDI32.dll:用于画图和文本显示; 静态库和动态库: 静态库: .LIB:函数和数据被编译至该二进制文件;在使用lib时,在编译

u013565064的博客 1407

基于多智能体深度强化学习的空地协同通信系统轨迹设计与访问控制

所属子方向: UAV assisted communication 名词注释 coordinated:协调、协同 base stations 基站,公用移动通信基站,是移动设备接入互联网的接口设备,是指在一定的无线电覆盖区中,通过移动通信交换中心,与移动电话终端之间进行信息传递的无线电收发信电台。 UAV-BS:无人机基站 cooperative-competitive game:合作竞争博弈 throughput :吞吐量,每秒比特数 bps,bits per second Determinis

skysys的研究小屋 4969

如何搭建pikachu靶场

Pikachu靶场本地搭建指南 下载安装PHPStudy并启动Apache/MySQL服务 获取Pikachu靶场源码并解压到网站根目录 配置数据库连接信息(修改config.inc.php文件) 创建pikachu数据库(用户名/密码设为root) 访问http://localhost/pikachu测试功能 常见问题:数据库连接失败需检查服务状态和配置信息,页面报错需检查PHP版本兼容性。建议使用PHP7.3/7.4版本,在隔离环境中搭建使用。 (150字)

2401_85351702的博客 1276

VS2005创建DLL

VS2005创建DLL 使用VS2005创建自己的动态链接库,这样就不用看到DLL文件有抵触情感了。 一、打开VS2005软件,创建DLL工程。起名ceshi1. 1)     2) 点击下一步,应用程序类型为DLL,空工程。 3) 完成,一个新的DLL工程设置完毕,接下来编辑源码 添加头文件,命名为ceshi1.h,编辑内容: #ifndef CESH

liulina603的专栏 6277

基于STM32F4通用定时器实现Livox激光雷达PPS硬件同步的工程实践

本文详细介绍了基于STM32F4通用定时器实现Livox激光雷达PPS硬件同步的工程实践。通过分析PPS信号的时序要求,对比不同定时器的特性,并提供完整的代码实现与调试技巧,帮助开发者解决多传感器数据融合中的时间同步问题。实测表明,该方案在车载环境中稳定运行超过2000小时。

weixin_30540691的博客 324

VS2005下使用dynamic_cast

由于项目中需要使用dynamic_cast,就写了个小代码测试下,谁知编译不过去,我把代码看了半天,都找不见错误,跟踪也不行,我就到qq群了寻找高手帮我解决,有位朋友看了下说程序没有问题。我就到网上搜了下,原来要用dynamic_cast,要在项目的属性下的C++语言中,启动运行时类型,选择:是(/GR)。又学了一招,呵呵。

LixueStudy的专栏 299

MATLAB算法实战应用案例精讲-【数模应用】校准曲线(附MATLAB、python和R语言代码实现)

模型校准曲线(Calibration Curve),也称为可靠性曲线(Reliability Curve)或概率校准曲线(Probability Calibration Curve),是一种评估分类模型输出概率准确性的图形工具。它可以帮助我们理解模型的预测概率是否与实际标签的分布一致。校准曲线通常包括以下步骤:计算模型预测概率:对于测试集中的每个样本,模型会输出一个概率值,表示样本属于正类的概率。将数据分桶:将这些概率值分成若干个等宽的桶(例如10个桶),每个桶中的样本具有相似的预测概率。

qq_36130719的博客 557

nvidia系列教程-AGX-Orin linux源码下载编译

NVIDIA AGX Orin 是一款高性能的嵌入式计算平台,广泛应用于人工智能、自动驾驶、机器人等领域。为 AGX Orin 编译定制的 Linux 内核,可以更好地适应特定应用需求,增强系统的灵活性。本文将详细介绍如何下载、配置和编译适用于 AGX Orin 的 Linux 内核源码。本文介绍了如何为 NVIDIA AGX Orin 平台下载、配置和编译定制的 Linux 内核源码。通过编译和部署定制内核,您可以更好地控制系统的行为,并根据特定应用需求进行优化。

flypig has a dream! 1283

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

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

227

Lammps实现甲烷与水的竞争吸附-循环不同气体分子

Lammps实现甲烷与水的竞争吸附

Rockyoung 5375

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

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

编程之路 758

lwip-2.0.3

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

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

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

philips的专栏 876

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

To be code... 1037

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

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

weixin_30462049的博客 86

(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的博客 1164

MFC的秘密:它的静态库和动态库所在何处

1.Dependency Walker的第一道揭秘 在MFC中我们写过很多静态库和动态库。这些dll都依赖于MFC;然后我们又交给别人使用,使得它们被依赖。 细想一下,就可能会发现其中的不平衡。我们生成的非组件dll,要交给别人使用,必须提供h头、lib库和dll库文件;可是我们使用MFC的dll时,好像什么也没有设置,MFC不请自来的加入到我们的程序中。虽然知道这个世界,每个人其实并

dongyue786的专栏 4897

动静态链接库解析

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

xiaoyaoziqing的专栏 1874
上一篇: C/C++后缀名详解
下一篇: 开源图像视频处理库
July_Yang
博客等级 码龄15年 46粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值