库的简介和分类

一、库的分类:

  静态库:库中代码被嵌入到可执行程序或动态库中,扩展名为“.lib”

  动态库:库中代码不被嵌入到可执行程序或其它动态库中,只在运行时加载,扩展名为“.dll”

  简介:

    1)由于静态库是将代码嵌入到使用程序中,多个程序使用时,会有多份代码,所以代码体积会增大,但是程序运行效率较高。动态库代码只需一份,其它程序通过函数地址以共享方式使用动态库中的代码,所以体积小。

    2)静态库发生变化后,新的代码需要重新链接(嵌入)到使用程序中。动态库发生变化后,只要函数的接口(函数名+参数表+返回类型)未发生变化,使用该动态库的程序无需重新链接。

    3)静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库

    4)我们在Windows目录下的system32文件夹中会看到kernel32.dll(处理内存管理和进程调度)、user32.dll(控制用户界面)和gdi32.dll(负责图形操作),windows的大多数API都包含在这些DLL中。

    5)VC中动态库分为三种,分别是:Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)

二、库的调用

  1、对静态库的调用,须用“#pragma coment(lib,".lib文件的相对路径")”来通知链接器寻找库的路径,C++程序调用C语言静态库(.c生成的.lib)/C语言动态库(.c生成的.dll .lib)中的函数时,须在进行函数声明时在函数原型的前面加上:extern "C";对于动态库的调用,动态库中的函数/类须导出,而在调用动态库中的函数/类时须导入,须将生成的动态库文件(.dll)与调用程序的执行文件(.exe)放在同一目录下,程序才可运行。

  2、C++程序在调用C语言库(C语言静态库/C语言动态库(静态调用时))、C++库(C++静态库/C++动态库(静态调用时))中的函数时,须进行函数声明。

  3、动态库中函数的导出方式有:“_declspec(dllexport)声明导出”和“模块定义文件.def”两种,而动态库中类的导出只能使用“_declspec(dllexport)声明导出”方式。

    导出方式比较:

    “模块定义文件.def”可以为动态库中的函数指定序号,即便日后修改了动态库中的代码,导致其中函数的名称及入口地址发生了改变,但只要其序号保持不变,仍可以在不重新链接的情况下,被正确地调用;

  4、对于动态库的调用分为:静态调用(隐式链接)/动态调用(显式链接);静态调用动态库中的函数时,须在函数原型前加“_declspec(dllimport)”导入函数,静态调用动态库中的类时,可以用类导出的宏开关;动态调用动态库中的函数时,使用动态加载步骤。

    调用方式比较:

    动态调用不需要导入库,因此只要函数接口(函数名+形参表+返回类型)不变,动态库做任何修改都不需要重新链接;若程序使用静态调用的动态库不存在,则程序无法启动,而动态调用只有在LoadLibrary该库时才会报错,别的功能部分正常运行;

时间: 2024-10-07 18:39:12

库的简介和分类的相关文章

muParser公式库使用简介( 转)

muParser是一个跨平台的公式解析库,它可以自定义多参数函数,自定义常量.变量及一元前缀.后缀操作符,二元操作符等,它将公式编译成字节码,所以计算起来非常快. 当前版本V1.28,官方网址http://sourceforge.net/projects/muparser/,这里是关于该库使用交流https://sourceforge.net/forum/forum.php?forum_id=462843 它提供两种方式使用,一种是将它编译进你的程序中,使用C++类,另一种是将它编译成共享库,可

mysql-数据库操作简介

1.创建数据库 是指在数据库系统中划分一块空间,用来存储相应数据 1.创建语法:CREATE DATABASE 数据库名 2.显示数据库:SHOW DATABASES; 2.删除数据库 1.语法:DROP DATABASE 数据库名; 3.数据库存储引擎(表类型) 1.显示mysql支持的存储引擎:SHOW ENGINES;或者SHOW ENGINES\g 2.显示mysql支持引擎:SHOW VARIABLES LIKE "hava%"; 3.查看mysql默认引擎:SHOW VAR

药品盘点机的简介及分类,药店盘点机

药品盘点机又叫药店盘点器.药厂盘点器,主要应用于药厂,零售药店盘点. 通过激光头读取商品条码或手工录入商品码来实现货物盘点的手持设备.盘点机体积小.重量轻.高性能.机动性强.盘点机内程序可以个性化定制开发. 申明:以上文字为"武汉汉码科技有限公司"原创,转载时务必注明出处. 技术分享,沟通你我,共同进步!www.hanma-scan.com 药品盘点机的简介及分类,药店盘点机

c++ 日志输出库 spdlog 简介(1)

参考文章: log库spdlog简介及使用 - 网络资源是无限的 - CSDN博客 http://blog.csdn.net/fengbingchun/article/details/78347105 spdLog的使用 - 烟消bug云散的专栏 - CSDN博客 http://blog.csdn.net/yanxiaobugyunsan/article/details/79088533 官方参考文档: QuickStart · gabime/spdlog Wiki · GitHub https

Python3.x:日期库dateutil简介

Python3.x:日期库dateutil简介 安装 pip install python-dateutil 关于parser #字符串可以很随意,可以用时间日期的英文单词,可以用横线.逗号.空格等做分隔符. #没指定时间默认是0点,没指定日期默认是今天,没指定年份默认是今年. from dateutil.parser import parse parse("Wed, Nov 12") #输出结果:datetime.datetime(2013, 11, 12, 0, 0) parse(

关于XSS漏洞的简介以及分类

不得不说注入的时代已经过去了,最近xss貌似比较热门.我就去恶补了一下,我表示我只是菜鸟,对xss不了解.所以从最基本的学起. 什么xss漏洞? 一.XSS攻击简介 作为一种HTML注入攻击,XSS攻击的核心思想就是在HTML页面中注入恶意代码,而XSS采用的注入方式是非常巧妙的. 在XSS攻击中,一般有三个角色参与:攻击者.目标服务器.受害者的浏览器. 由于有的服务器并没有对用户的输入进行安全方面的验证,攻击者就可以很容易地通过正常的输入手段,夹带进一些恶意的HTML脚本代码.当受害者的浏览器

libcurl库的简介(一)

一.Libcurl库简介 LibCurl是免费的客户端URL传输库,支持FTP,FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, FILE ,LDAP等协议,其主页是http://curl.haxx.se/. 具备线程安全 与IPv6兼容 二.libcurl库函数部分介绍 1.       调用curl_global_init()初始化libcurl CURL_EXTERN CURLcode curl_global_init(long flags

Android网络通信库Volley简介

1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Google I/O 2013上,Volley发布了.Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮.这是Volley名称的由来: a burst or emission of many things or a large amount at

一个C++写的html解析库的简介

学习Qt也有段时间了,前一阵子想着写一个Qt版的博客园桌面端.现阶段主要想实现: (1)显示博客园主页的推荐的那个些文章的条目(包括作者的图像.该博客的浏览次数.发布时间等). (2)可以登陆自己的博客园账号,并显示自己的博客文章. (3)点击显示的博客文章条目时可以弹出窗口显示该片博客的内容. 同时还要实现自动刷新功能. 但是在编写的过程中,需要跟reply回来的html文档打交道,需要一个可以解析html文档的库.我在网上搜索了找到了C++编写的html解析库有htmlcxx.和google