`

lib和dll文件的区别和联系

阅读更多

lib和dll
lib和dll文件的区别和联系

.dll是在你的程序运行的时候才连接的文件,因此它是一种比较小的可执行文件格式,.dll还有其他的文件格式如.ocx等,所有的.dll文件都是可执行。

.lib是在你的程序编译连接的时候就连接的文件,因此你必须告知编译器连接的lib文件在那里。一般来说,与动态连接文件相对比,lib文件也被称为是静态连接库。当你把代码编译成这几种格式的文件时,在以后他们就不可能再被更改。如果你想使用lib文件,就必须:
1 包含一个对应的头文件告知编译器lib文件里面的具体内容
2 设置lib文件允许编译器去查找已经编译好的二进制代码

如果你想从你的代码分离一个dll文件出来代替静态连接库,仍然需要一个lib文件。这个lib文件将被连接到程序告诉操作系统在运行的时候你想用 到什么dll文件,一般情况下,lib文件里有相应的dll文件的名字和一个指明dll输出函数入口的顺序表。如果不想用lib文件或者是没有lib文 件,可以用WIN32 API函数LoadLibrary、GetProcAddress。事实上,我们可以在Visual C++ IDE中以二进制形式打开lib文件,大多情况下会看到ASCII码格式的C++函数或一些重载操作的函数名字。

一般我们最主要的关于lib文件的麻烦就是出现unresolved symble 这类错误,这就是lib文件连接错误或者没有包含.c、.cpp文件到工程里,关键是如果在C++工程里用了C语言写的lib文件,就必需要这样包含:
extern "C"
{
#include "myheader.h"
}
这是因为C语言写的lib文件没有C++所必须的名字破坏,C函数不能被重载,因此连接器会出错。

===============================

在VC中不用MFC如何制作dll

方法一:使用export 和 import

在VC中建立一个Console Application,建立2个文件:Dll.h 和 Dll.cpp

Dll.h

#ifdef MYLIBAPI
#else
#define MYLIBAPI extern "C" _declspec (dllimport)
#end if

MYLIBAPI int Add (int iLeft, int iRight)
MYLIBAPI int Sub (int iLeft, int iRight)

Dll.cpp

#define MYLIBAPI extern "C" _declspec (dllexport)

#include "Dll.h"

int Add (int iLeft, int iRight)
{
return iLeft + iRight ;
}

int Sub (int iLeft, int iRight)
{
return iLeft - iRight ;
}

保存文件。
在Project->setting->link 最下面加上 “/dll”, "/"之前一定要与前一项
有空格。
然后编译,就可以在debug 或 release下面找到dll 和 lib 文件了
使用的时候包含dll.h文件

方法二:使用def文件
建立一个console application, 建立2个文件dll.h 和 dll.cpp

Dll.h

int Add (int iLeft, int iRight) ;
int Sub (int iLeft, int iRight) ;

Dll.cpp

#include "Dll.h"

int Add (int iLeft, int iRight)
{
return iLeft + iRight ;
}

int Sub (int iLeft, int iRight)
{
return iLeft - iRight ;
}

然后再当前目录下面建立一个.def文件,文件名最好和要输出的dll名字一样,扩展名
为.def, 里面写上:

LIBRARY dllname.dll
EXPORTS
Add @1
Add @2
然后将这个文件添加到工程中,
在link中设置 /dll, 然后编译
在debug或release中就可以找到dll和lib了
使用的时候加上dll.h文件

分享到:
评论

相关推荐

    H LIB DLL文件的区别月联系

    ### H LIB DLL 文件的区别与联系 #### 概述 在软件开发过程中,程序员经常会接触到`.h`、`.lib`和`.dll`等不同类型的文件。这些文件分别在编译、链接以及运行时扮演着不同的角色。理解它们之间的区别与联系对于...

    dll文件转换为lib

    DLL文件包含了可执行代码和数据,可供多个程序共享使用,而LIB文件则通常是静态链接库,用于编译时链接到应用程序中。在某些情况下,我们可能需要将DLL转换为LIB,以便在没有源代码的情况下,能够实现对DLL中的函数...

    vs2010下lib和dll文件的使用

    VS2010下lib和dll文件的使用 在 VS2010 中,lib 文件和 dll 文件是两个常用的文件类型,分别用于静态链接和动态链接。下面将详细介绍这两种文件的生成和使用方法。 lib 文件 lib 文件是一种文件后缀,是 Windows ...

    OpenCV-430 lib 和 dll 文件

    在本文中,我们将深入探讨OpenCV 4.3.0版本,特别是与Visual Studio 2015(VS2015)相关的lib和dll文件,以及None free模块。 首先,OpenCV 4.3.0是该库的一个稳定版本,它提供了大量的更新和新功能,包括改进的...

    OpenCV-4.7.0 lib 与 dll 文件

    在本文中,我们将深入探讨OpenCV 4.7.0版本,特别是与Visual Studio 2015(VS2015)相关的lib和dll文件,以及它们在C++开发中的应用。 首先,OpenCV 4.7.0是OpenCV库的一个较新版本,它提供了一系列改进和新功能。...

    dll和lib的区别

    在生成dll文件时,经常会生成一个lib文件,该lib文件实际上不是真正的函数集,而是一个导入库,每一个导出函数都是一个跳转指令,直接跳转到dll文件中的位置。 需要注意的是,真正的lib文件是通过lib.exe工具生成的...

    32位 opencv 3.4.1 lib和dll文件

    32位版本的OpenCV 3.4.1包含了用于Windows操作系统上的lib和dll文件,这些文件是库的静态和动态链接部分。 1. **OpenCV版本3.4.1**:这是OpenCV的一个稳定版本,发布于2018年,提供了许多改进和新特性。这个版本...

    静态链接库lib和动态链接库dll区别

    静态链接库lib是将库中的所有指令都包含在最终生成的EXE文件中,而动态链接库dll则不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。 静态链接库的使用需要库的开发者...

    VS2019编译好的lib、dll文件,用于配置ceres

    使用VS2019编译好的lib、dll文件,按照教程https://blog.csdn.net/qq_32867925/article/details/128813744?spm=1001.2014.3001.5501可以在vs2019平台上配置好ceres。包含debug 与release

    64位 opencv 3.4.1 lib和dll文件

    总之,64位的OpenCV 3.4.1 lib和dll文件是开发64位系统下计算机视觉应用的基础,它们为开发者提供了便捷、高效的方式去利用计算机的计算资源,实现各种复杂的图像处理和分析任务。无论是初学者还是经验丰富的专业...

    lib 和 dll 封装及使用

    4. **创建 dll 文件**:通过编译和链接生成 dll 文件(libdll.dll)。 5. **创建 .def 文件**:可以使用 .def 文件来指定 dll 的导出函数,这样就不必在每个导出函数上都加上 `__declspec(dllexport)` 关键字。 #####...

    VC ++ 6.0环境中LIB与DLL文件的使用

    LIB文件(库文件)和DLL文件(动态链接库)在软件开发过程中扮演着不同的角色,但共同目标都是为了实现代码的重用和模块化,提高软件的可维护性和扩展性。 #### 2. LIB文件的理解与应用 **2.1 定义与作用** LIB...

    无水印的pdflib动态库 pdflib.dll

    1. **编译配置**:在 C++ 项目中,正确地链接和配置 pdflib.dll,确保所有必要的库文件和头文件都已包含。 2. **错误处理**:PDFlib 提供了详细的错误处理机制,开发过程中需捕获并处理可能出现的错误。 3. **许可证...

    由DLL文件生成LIB文件的工具

    DLL文件包含可重用的代码和数据,可供多个应用程序共享,而LIB文件则是一个静态链接库,用于告诉编译器如何连接到DLL。在某些情况下,开发者可能需要从已有的DLL文件生成相应的LIB文件,以便在不直接引用DLL的情况下...

    opencv2.0中的lib和dll,跑别人程序时可能会用到,到处找后整理起来的

    这里把所有的文件名列出来,有需要的就下吧: 2.0:lib:cv200.lib; cv200d.lib; cvaux200.lib; cvaux200d.lib; cxcore200.lib; cxcore200d.lib; cxts200.lib; cxts200d.lib; highgui200.lib; highguid.lib; ml...

    glut 库(头文件、lib文件、dll文件)

    1. 安装GLUT库:下载包含头文件、lib文件和dll文件的GLUT库,并将其放置在合适的位置。通常,头文件放在编译器的include目录下,lib文件放在链接器的library目录下,dll文件则应放在操作系统能够找到的路径,如系统...

    opengl的库文件,lib文件,dll文件

    在使用这些库时,开发者需要正确配置编译环境,确保所有必要的库文件和dll文件被正确链接和加载。在Windows环境下,这通常涉及设置项目属性,添加包含目录,指定库目录,并将运行时依赖的dll文件复制到可执行文件...

    tcmalloc编译好的lib文件和dll文件

    在这个压缩包中,包含的是已经编译好的lib和dll文件,分别对应于动态链接库和静态库两种编译形式。 **动态链接库(DLL)与静态库(LIB)的区别** 1. **动态链接库(DLL)**:动态链接库在程序运行时才被加载到内存...

    MFC42U.LIB和MFC42UD.LIB和DLL文件

    MFC42U.LIB和MFC42UD.LIB是MFC库的不同版本,而MFC相关的DLL文件则是运行时支持库。 MFC42U.LIB是MFC的Unicode版本静态链接库,用于与Unicode编码兼容的应用程序。它包含了MFC类的实现,当你的项目链接到这个库时,...

Global site tag (gtag.js) - Google Analytics