例:
在VC6.0中选择下图的工程:
在静态库的头文件中写下如下代码:
#ifndef __LIB__H
#define __LIB__H
extern "C" int add(int a,int b);
#endif
在CPP文件中
#include "lib.h"
int add(int a,int b)
{
return a + b;
}
以上就是静态库的编写;
在你要调用的程序中:
#pragma comment(lib, "lib.lib")
#include "Lib.h"
#include <iostream>
using namespace std;
void main()
{种子怎么用
int sum;
sum = add(3,5);
cout << "sum = " << sum <<endl;神州十二号最新消息
}
整个静态链接库的调用就完成了,下面分享下在网上的一编文章:
静态链接库
静态链接库就是你使用的.lib文件,库中得代码最后需要连接到你的可执行文件中去,所以静态连接的可执行文件一般比较大一些。
引用:
一、通用:
格式如:#pragma comment(lib,"XXX.lib")
二、针对开发环境:
1、如果使用VC,可以在Project Setting-->Link中加入你的静态库,也可以直接把该.lib文件加入到你的工程中
2、如果使用Visual Studio,位置在 项目→配置属性→连接器→输入→附加依赖项 中加入.lib文件
静态链接库不同于动态链接库(*.dll),在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名为*.LIB),Visual C++的编译器在链接过程中将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件。这个过程称为"静态链接",此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。
DLL
DLL的全称是Dynamic Link Library, 中文叫做“动态链接文件”。在Windows操作系统中, DLL对于程序执行是非常重要的, 因为程序在执行的时候, 必须链接到DLL文件, 才能够正确地运行。而有些DLL文件可以被许多程序共用。因此, 程序设计人员可以利用DLL文件, 使程序不至于太过巨大。但是当安装的程序越来越多, DLL文件也就会越来越多, 如果当你删除程序的时候, 没有用的DLL文件没有被删除的话, 久而久之就造成系统的负担了。
DLL的好处
DLL是动态连接库。使用动态连接库的一些好处是:
1.多个应用程序共享代码和数据:比如Office软件的各个组成部分有相似的外观和功能,这就是通过共享动态连接库实现的。
2.在钩子程序过滤系统消息时必须使用动态连接库。
3.动态连接库以一种自然的方式将一个大的应用程序划分为几个小的模块,有利于小组内部成员的分工与合作。而且,各个模块可以独立升级。如果小组中的一个成员开发了一组实用例程,他就可以把这些例程放在一个动态连接库中,让小组的其他成员使用。
4.为了实现应用程序的国际化,往往需要使用动态连接库。使用动态连接库可以将针对某一国家、语言的信息存放在其中。对于不同的版本,使用不同的动态连接库。在使用AppWizard生成应用程序时,我们可以指定资源文件使用的语言,这就是通过提供不同的动态连接库实现的。
5.拓展研发工具的功能,由于DLL是和语言无关的,因此能创建一个DLL,被C++、VB或所有支持动态链接库的语言调用。这样如果一种语言存在不足,就能通过访问另一种语言创建的DLL来弥补。
VC++、C++ Builder、Delphi都可以编写DLL文件。Visual Basic 5.0以上版本也可以编写一种特殊的DLL,即ActiveX DLL。
编辑本段
对于DLL文件的其他了解
1.怎么了解某应用程式使用哪些DLL文件
右键单击该应用程式并选择快捷菜单中的“快速查看”命令,在随后出现的“快速查看”窗口的“引入表”一栏中你将看到其使用DLL文件的情况。
2.怎么知道DLL文件被几个程式使用
元旦高速公路免费吗2022 运行Regedit,进入HKEY_LOCAL_MACHINESoftwareMicrosrft视窗系统Current-
VersionSharedDlls子键查看,其右边窗口中就显示了所有DLL文件及其相关数据,其中数据右边小括号内的数字就说明了被几个程式使用,(2)表示被两个程式使用,(0)则表示无程式使用,能将其删除。
3.怎么解决DLL文件丢失的情况
有时在卸载文件时会提醒你删除某个DLL文件可能会影响其他应用程式的运行。所以当你卸载软件时,就有可能误删共享的DLL文件。一旦出现了丢失DLL文件的情况,如果你能确定其名称,能在Sysbckup(系统备份目录)中到该DLL文件,将其复制到System目录中。如果这样不行,在计算机启动时又总是出现“***dll文件丢失……”的提示框,你能在“开始/运行”中运行Msconfig,进入系统设置实用程式对话框以后,单击选择“System.ini”标签,出提示丢失的DLL文件,使其不被选中,这样开机时就不会出现错误提示了。
DLL不是独立运行的程序,它是某个程序的一个部分,它只能由所属的程序调用。用户不能,也不需要打开它。
静态链接库LIB和动态链接库DLL 收藏
一、 静态链接库与动态链接库区别
静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 D
赞美劳动的名言LL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。 动态库就是在需要调用其中的函数时,根据函数映射表到该函数然后调入堆栈执行。如果在当前工程中有多处对dll文件中同一个函数的调用,那么执行时,这个函数只会留下一份拷贝。但是如果有多处对lib文件中同一个函数的调用,那么执行时,该函数将在当前程序的执行空间里留下多份拷贝,而且是一处调用就产生一份拷贝。
静态链接库与静态链接库调用规则总体比较如下:
1、 静态链接库(比较简单):
首先,静态链接库的使用需要库的开发者提供生成库的.h头文件和.lib文件。生成库的.h头文件中的声明格式如下:
extern "C" 函数返回类型 函数名(参数表);
在调用程序的.cpp源代码文件中如下:
#include "..\lib.h"
#pragma comment(lib,"..\\debug\\libTest.lib") //指定与静态库一起链接(或者在IDE的lib栏中填入lib文件的路径,在IDE的lib目录栏填入lib所在文件夹目录)
其次因为静态链接库是将全部指令都包含入调用程序生成的EXE文件中。因此如果用的是静态链接库,那么也就不存在“导出某个函数提供给用户使用”的情况,要想用就得全要!要不就都别要!
个人理解:其实可以认为静态链接看做与直接将要链入的lib工程的源码引入编译等效,因为实际结果来看也应该是等效的,最终都只是一个exe文件,功能会是完全一样的,只是多了一些编译链接的过程.
2、 动态链接库:
动态链接库的使用需要库的开发者提供生成的.lib文件和.dll文件。或者只提供dll文件。
首先我们必须先注意到DLL内的函数分为两种:
1)导出函数,可供应用程序调用;小二寸照片的尺寸
2) DLL内部函数,只能在 DLL 程序使用,应用程序无法调用它们。
因此调用程序若想调用DLL中的某个函数就要以某种形式或方式指明它到底想调用哪一个函数。
Ø 对于DLL的导出,可以采用如下方法:
花儿与少年嘉宾名单 #ifdef WLL_EXPORTS
#define WLL_API __declspec(dllexport)
#else
#define WLL_API __declspec(dllimport)
#endif
这是导出类的宏定义,将导出类必须加上该宏,才能被导出。
此处的WLL_EXPORTS会出现在 project setting C++ PreProcessor的PreProcessor definition中,这个MACRO表明其要定义一个导出宏。当前库编译时,加了WLL_API的类将被导出,而包含该头文件的其他调用DLL或EXE,由于没有定义WLL_API宏,将申明为导入该类。
Ø 动态库函数的调用,可以采用静态链接的方式 ,主要步骤如下:
1) 包含DLL中导出的头文件。
2) 采用#pragma comment(lib,"..\\debug\\libTest.lib")导入动态库生成的*.lib头文件。或在 projectàsettingsàLinkeràInput的Additional Dependencies中加入lib文件。
3) 将动态库生成的*.dll文件放到EXE或DLL的同一目录下。
Ø 也可以采用动态加载的方式调用 ,步骤如下:
Another.dll有一个int Add(int x,int y) 函数。则完整的调用过程如下:
typedef int (* FunPtr)(int,int); //定义函数指针
FunPtr funPtr;
Handle handle =LoadLibrary("Another.dll");
funPtr =(FunPtr)GetProcAddress(handle ,"Add");
funPtr(2,3); // 2+3;
FreeLibrary(handle); // 释放载入的动态库
二、 LIB文件
目前以lib后缀的库有两种,一种为静态链接库 (Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库 (Import Libary,以下简称“导入库”)。
静态库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个静态库,如果其中有错,它会准确的到是哪个obj有错,即静态lib只是壳子。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论