LIB, DLL 区别 关系 使用

来源:互联网 发布:hi3531编程 编辑:程序博客网 时间:2024/06/10 19:48

A.加载 lib 头文件

分两种方法:

(1)适用于当前项目

  1. 第一步:
    项目->属性->C/C++->常规->附加包含目录(浏览.h文件的路径) ,添加包含文件。
  2. 第二步:
    a,项目->属性->C/C++->链接器->输入->附加依赖项(写入lib的名称) 添加库文件。
    b,项目->属性->C/C++->链接器->输入->附加依赖项 ,添加用到的lib。
  3. 第三步:
    在要使用cpp文件前加入 (注意文件的路径)
#include <gtest/gtest.h>

(这一步也可以在代码中显示调用 #pragma comment(lib, “*.lib”) )
(若不添加,连接报错:无法解析的外部符号)

(2)适用于所有项目,设置好后即使重建新项目也不需重新设置

  1. Tools->Options->Projects and Solutions->VC++ Directories ->Show
    directories for:(选择include files)->添加.h路径;
  2. Tools->Options->Projects and Solutions->VC++ Directories ->Show
    directories for:(选择Library files)->添加lib路径;

(这些路径只告诉编译器怎么找文件,没有说把那里面的文件加入工程.)
(若不设置,编译报错:无法打开*文件)。

B.加载dll

将dll文件拷贝到工程debug文件下(如果不拷贝,编译链接不报错,运行报错:无法找到*.dll)。

C. DLL 与 LIB 文件的区别

lib 是一个二进制文件,与 dll 类似,供其他程序调用。lib 与 dll 的区别是:dll是运行时需要的,lib 是编译时需要的。

共有两种库:
  一种是 LIB 包含了函数所在的 DLL 文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的 DLL 提供,称为动态链接 库dynamic link library。
  一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。

共有两种链接方式:
  动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅包含在运行时定位 DLL 函数的可执行代码所需的信息。
  静态链接使用静态链接库,链接器从静态链接库LIB获取所有被引用函数,并将库同代码一起放到可执行文件 中。

关于 lib 和 dll 的区别如下:
  (1) lib 是编译时用到的,dll 是运行时用到的。如果要完成源代码的编译,只需要 lib;如果要使动态链接的程序运行起来,只需要dll。
  (2)如果有 dll 文件,那么 lib 一般是一些索引信息,记录了 dll中函数的入口和位 置,dll 中是函数的具体内容;如果只有 lib 文件,那么这个 lib 文件是静态编译出来的,索引和实现都在其中。使用静态编译的 lib 文件,在运行程序时 不需要再挂动态库,缺点是导致应用程序比较大,而且失去了动态库的灵活性,发布新版本时要发布新的应用程序才行。
  (3)动态链接的情况下,有两个 文件:一个是 LIB 文件,一个是 DLL 文件。LIB包含被DLL导出的函数名称和位置,DLL 包含实际的函数和数据,应用程序使用LIB文件链接到 DLL 文件。在应用程序的可执行文件中,存放的不是被调用的函数代码,而是 DLL 中相应函数代码的地址,从而节省了内存资源。DLL 和 LIB 文件必须随应用程序 一起发行,否则应用程序会产生错误。如果不想用 lib 文件或者没有 lib 文件,可以用 WIN32 API 函数 LoadLibrary、GetProcAddress装载。

使用lib需注意两个文件:
  (1) .h头文件,包含 lib 中说明输出的类或符号原型或数据结构。应用程序调用 lib 时,需要将该文件包含入应用程序的源文件中。
  (2) .LIB文件,略。

使用dll需注意三个文件:
  (1) .h 头文件,包含 dll 中说明输出的类或符号原型或数据结构的 .h 文件。应用程序调用 dll 时,需要将该文件包含 入应用程序的源文件中。
  (2) .LIB 文件,是 dll 在编译、链接成功之后生成的文件,作用是当其他应用程序调用 dll 时,需要将该文件引入应用 程序,否则产生错误。如果不想用 lib 文件或者没有 lib 文件,可以用 WIN32 API函数LoadLibrary、GetProcAddress装载。
  (3) .dll文件,真正的可执行文件,开发成功后的应用 程序在发布时,只需要有 .exe 文件和 .dll 文件,并不需要 .lib 文件和 .h 头文件

转自: http://www.cnphp6.com/archives/64967?utm_source=tuicool

0 0