`
jandroid
  • 浏览: 1933525 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

静态链接库(Lib)与动态链接库(DLL)的区别

 
阅读更多

静态连接库就是把(lib)文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件;动态链接就是把调用的函数所在文件模块(DLL)和调用函数在文件中的位置等信息链接进目标程序,程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。

静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。


“每一个lib文件就是若干函数(假设只有函数)的定义”
lib库有两种,一种是包含了函数所在DLL文件和文件中函数位置的信息,称为导出库;一种是包含函数代码本身,一般现有的DLL,用的是前一种库;以前在DOS下的TC/BC等,是后一种库。包含函数原型声明的,是头文件(.h)。

“通过#include包含这些函数声明的头文件后,我们的应用程序就可以使用lib文件中的函数”

还要指定编译器链接相应的库文件。在IDE环境下,一般是一次指定所有用到的库文件,编译器自己寻找每个模块需要的库;在命令行编译环境下,需要指定每个模块调用的库。

“那他和直接给出那个函数定义的文件,比如.cpp文件,和头文件有什么区别,静态链接库有什么用”
cpp文件是源代码,库文件是编译后的二进制代码,比如你可以调用Windows的API,但是不能看到其源代码一样。

“还有不明白的是,静态链接库中的lib文件只要用到,则整个lib文件的内容都放进了exe文件中,那它是被编译进去还是链接的时候连接进去的呢?”
是在链接的时候将lib链接到目标代码中。

静态链接库(Lib)
在VC++6.0中new一个名称为libTest的static library工程,

并新建lib.h和lib.cpp两个文件,lib.h和lib.cpp的源代码如下:

//文件:lib.h
#ifndef LIB_H
#define LIB_H
extern "C" int add(int x,int y);   //声明为C编译、连接方式的外部函数
#endif

//文件:lib.cpp
#include "lib.h"
int add(int x,int y)
{
return x + y;
}


  编译这个工程就得到了一个.lib文件,这个文件就是一个函数库,它提供了add的功能。将头文件和.lib文件提交给用户后,用户就可以直接使用其中的add函数了。

  标准Turbo C2.0中的C库函数(我们用来的scanf、printf、memcpy、strcpy等)就来自这种静态库。

下面来看看怎么使用这个库,在libTest工程所在的工作区内new一个libCall工程。libCall工程仅包含一个main.cpp文件,它演示了静态链接库的调用方法,其源代码如下:

#include <stdio.h>
#include "../lib.h"//不可丢失
#pragma comment( lib, "..//debug//libTest.lib" )  //指定与静态库一起连接
int main(int argc, char* argv[])
{
printf( "2 + 3 = %d", add( 2, 3 ) );
}


  静态链接库的调用就是这么简单,或许我们每天都在用,可是我们没有明白这个概念。代码中#pragma comment( lib , "..//debug//libTest.lib" )的意思是指本文件生成的.obj文件应与libTest.lib一起连接。

分享到:
评论

相关推荐

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

    "静态链接库lib和动态链接库dll区别" 静态链接库lib和动态链接库dll都是共享代码的方式,但它们有着根本的区别。静态链接库lib是将库中的所有指令都包含在最终生成的EXE文件中,而动态链接库dll则不必被包含在最终...

    静态链接库LIB和动态链接库DLL借鉴.pdf

    在这篇文章中,我们主要讨论了静态链接库(LIB)和动态链接库(DLL)的区别、使用以及它们在编程实践中的应用。 首先,我们来看静态链接库(LIB)。静态链接库是编译时链接的一种库文件,它会在程序生成可执行文件...

    VC6静态链接库(LIB文件)的创建、使用

    在Microsoft Visual C++ 6.0 (VC6) 中,静态链接库(LIB文件)是一种重要的编程资源,它包含了预编译的函数和类,可供其他应用程序在编译时直接集成,无需运行时动态链接。下面我们将深入探讨如何创建和使用VC6中的...

    自-静态链接库(Lib)与动态链接库(DLL)的区别 .pdf

    标题中的“自-静态链接库(Lib)与动态链接库(DLL)的区别”是指在软件开发过程中,如何选择使用静态链接库(.lib)和动态链接库(.dll)这两种不同的库类型。它们各自有不同的特性和使用场景。 静态链接库是将库文件中的...

    C++ 静态链接库与动态链接库

    链接库分为静态链接库(Static Library)和动态链接库(Dynamic Link Library,简称DLL)。这两种库各有其特点和适用场景,下面我们将深入探讨它们的创建过程、工作原理以及它们在实际项目中的应用。 **静态链接库*...

    openssl静态链接库lib

    标题提到的 "openssl静态链接库lib",即指将OpenSSL库静态链接到你的应用程序中。压缩包内的两个文件 "libeay32.lib" 和 "ssleay32.lib" 就是静态链接所需的库文件。libeay32.lib 包含了OpenSSL的核心加密功能,如...

    自-静态链接库(Lib)与动态链接库(DLL)的区别 .docx

    静态链接库和动态链接库是编程中两种不同的库文件类型,它们在程序编译和运行时起着关键作用。 静态链接库(Lib)是一种将函数和数据打包在一起的二进制文件,当程序编译时,编译器会将库中的函数代码直接合并到可...

    动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a).docx

    动态链接库及静态链接库(Windows下的.dll .lib和Linux下的.so .a) 动态链接库和静态链接库是两种不同的库文件类型,它们在编译和链接过程中扮演着重要的角色。下面我们将详细探讨这两种库文件的特点和使用方法。 ...

    静态、动态链接库的创建和调用

    静态链接库在编译时期与应用程序链接,而动态链接库则在运行时期加载。 首先,我们来谈谈静态链接库。创建静态库的过程中,我们需要一个项目,通过添加需要封装成库的代码文件(例如C/C++文件)。创建完成后,编译...

    openssl 静态 链接库 libeay32.lib ssleay32.lib 64位

    总的来说,OpenSSL的静态链接库libeay32.lib和ssleay32.lib为64位Windows环境提供了方便的加密和安全通信功能,使开发者能够在不依赖额外DLL的情况下构建应用程序。正确地配置和使用这些库是确保程序安全性和兼容性...

    QtXlsx开源库 编译好的静态库lib和动态库dll

    提供的文件包括静态库(lib)和动态库(dll)。静态库是将库函数链接到目标代码中,使得程序运行时不再需要外部的库文件。动态库则在运行时被加载,减少了程序的大小,但需要对应的dll文件在运行环境中存在。对于...

    简单的代码来说明动态链接库,静态链接库

    动态链接库(DLL)和静态链接库(LIB)是Windows操作系统中两种常见的库文件类型,它们在软件开发中起着至关重要的作用。本篇文章将深入探讨这两种库的区别、生成过程以及如何在实际项目中使用。 首先,我们来看...

    VC 动态链接库(DLL)编程.rar

    静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都被直接包含在最终生成的EXE 文件中了。但是若使用DLL,该DLL 不必被包含在最终EXE 文件中,EXE 文件执行时可以...

    c++ 静态链接库动态链接库示例

    静态链接库和动态链接库是两种主要的链接库类型,它们各有优缺点,适用于不同的开发场景。本篇文章将详细探讨这两种链接库的概念、创建过程以及如何在C++项目中使用它们。 **静态链接库(Static Linking Library)*...

    静态链接库和动态链接库

    ##### 4.2 C静态链接库LIB的制作 在Visual Studio中制作静态链接库的基本步骤如下: 1. 创建一个新的Win32 Static Library项目。 2. 添加必要的源文件和头文件。 3. 编译项目生成`.lib`文件。 4. 在需要使用该库的...

    动态链接库与静态链接库 的区别

    ### 动态链接库与静态链接库的区别 在软件开发领域,链接库是软件构建过程中不可或缺的一部分,它们有助于提升代码的复用性、模块化以及性能优化。链接库大致可以分为两大类:静态链接库(Static Library)和动态...

    动态链接库(DLL)编程深入浅出

    其中静态链接库和动态链接库的主要区别在于: - **静态链接库**:在编译阶段,静态库中的代码会被直接嵌入到最终生成的可执行文件(EXE)中。这种方式增加了可执行文件的大小,并且无论是否使用库中的所有功能,库...

    VC++动态链接库(DLL)编程深入浅出(全).pdf

    - **静态链接库与动态链接库的区别**:静态链接库与动态链接库都是为了实现代码的共享和复用而设计的。在静态链接库中,库文件会被直接编译进最终的可执行文件(EXE)中,无法在运行时被替换。相比之下,使用动态链接...

Global site tag (gtag.js) - Google Analytics