.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函数不能被重载,因此连接器会出错。
文章出处:飞诺网(
www.diybl.com):http://www.diybl.com/course/3_program/c++/cppjs/20081117/151410.html
分享到:
相关推荐
静态库和共享库(动态库)。 二者的不同点在于代码被载入的时刻不同。 } 静态库在程序编译时会被连接到目标代码中,程序运行 时将不再需要该静态库,因此体积较大。 } 动态库在程序编译时并不会被连接到目标代码中,...
创建静态库的流程与动态库类似,但不需要最后一步生成动态库。使用静态库的程序在运行时体积较大,但不受系统动态库版本影响。 使用动态库和静态库的方式有所不同。对于动态库,需要确保目标系统上已经安装了相应的...
### Linux静态库与动态库详解 #### 一、引言 在Linux环境下,库是一种重要的软件组件,用于封装一组相关的函数或数据结构,以便于在不同的应用程序之间共享代码。库通常分为两大类:静态库(static libraries)和...
1、二者均需要由.o文件生成,二者前缀均为lib,静态库后缀以 .a,动态库的后缀以.so 2、生成目标可执行文件后,静态库可以直接删除,因为静态库已经被加载到可执行文件中进行编译。 而针对动态库则需要在运行...
创建动态库的步骤与静态库类似,主要区别在于选择“动态库”模板,其他配置基本一致。生成的将是.dll文件和对应的.lib导入库文件。 使用这些库时,你需要将库文件(.lib或.dll)和对应的头文件包含到你的项目中: ...
动态库、静态库的创建与连接 动态库和静态库是两种常见的库类型,它们在编译和链接过程中扮演着不同的角色。在这篇文章中,我们将详细介绍动态库和静态库的创建、连接方法及其优缺点。 一、静态库 静态库是一种...
3. **动态库与静态库**: - **动态库**(.dll文件):在程序运行时由操作系统加载,多个程序可以共享同一份库副本,节省内存。但是,动态库的缺失或版本不匹配可能导致运行时错误。 - **静态库**(.lib文件):在...
本文将深入探讨动态库(Dynamic Library)和静态库(Static Library)的概念,以及它们在测试和依赖性方面的差异。我们将通过一个名为"lib_share_static"的示例来说明这些问题。 首先,我们来理解什么是动态库和...
首先,我们要理解静态库和动态库的区别。静态库(.a 或 .lib)是在编译时将库代码直接嵌入到目标程序中,形成一个完整的可执行文件;而动态库(.so 或 .dll)则是在运行时被加载,多个程序可以共享同一份库资源,...
1. **动态库与静态库的区别** - **动态库** (Dynamic Link Library, DLL):在运行时被应用程序加载,多个程序可以共享同一库,节省系统资源。动态库文件通常以`.dll`结尾。 - **静态库** (Static Library):在编译...
标题 "C++ protobuf debug release动态库和静态库" 涉及的是Google的Protocol Buffers(简称protobuf)在C++中的应用,特别是如何构建和使用protobuf的动态库和静态库。Protocol Buffers是一种数据序列化协议,允许...
本节主要探讨的是如何制作和使用静态库与动态库。 **静态库的制作与使用** 静态库是将多个目标文件合并成一个单一的可重用库文件,其扩展名为`.a`。在Linux环境下,制作静态库通常分为以下三个步骤: 1. **编译...
#### 静态库与动态库的基本概念 在Linux环境下,静态库和动态库是两种常见的链接库形式,它们分别在编译和运行阶段发挥着不同的作用。 **静态库**在程序编译过程中会被链接到目标代码中,也就是说,最终的可执行...
C++编程中,库是将一组相关函数和数据组织在一起的机制,分为静态库和动态库两种主要形式。本文将详细探讨这两种库的区别以及它们在实际应用中的作用。 首先,让我们了解一下`lib`文件和`dll`文件。`lib`文件(静态...
MyTest程序 调用 Dll1动态库,Dll1 同时调用 MyDll2动态库和Mylib1静态库。 最后,MyTest.exe 只需放置Dll1动态库和MyDll2动态库 程序在VS2015上编译的,亲自测试通过。
使用简单的程序展示了C++调用动态库和静态库的方法。 文件结构: exe:笔者部署可运行文件,因开发环境版本不同,可能存在无法直接使用的情况,两个部署文件(copy_ldd.sh及useLib1.sh)可以结合文章分享的(ubuntu下...
在Linux系统中,开发软件时常会遇到需要创建和使用动态库(.so)与静态库(.a)的情况。动态库允许多个程序共享同一份代码,节省内存资源,而静态库则将库代码直接编译进目标程序,不依赖外部环境。本篇将详细介绍在...
这是一个已经编译成动态库(dll)和静态库(lib)的Jsoncpp,适用于Windows软件开发的C++开发者。适用于使用Visual Studio开发的人员,库文件编译没有按照C的格式,所以更适合做C++方向的场景使用
7. **动态库与静态库的区别**:动态库在运行时由操作系统加载,减少了应用程序的大小,但依赖于系统的环境。静态库则将库代码直接编译进应用程序,无需运行时依赖,但可能导致应用程序体积增大。 Boost库包含的组件...
libyuv动态库与静态库的使用,封装,测试demo.libyuv所处理的数据类型一般都是NV21 YUV420格式。需求端客户要对8位的灰度图像进行放缩处理,同时对外发布版本的时候不能直接告诉客户我们用的是libyuv,所以需要对...