zoukankan      html  css  js  c++  java
  • 转载:明明白白VC LIB和DLL的使用

    转载来自:http://dpinglee.blog.163.com/blog/static/1440977532016316813889/

    1.加载lib/头文件

    分两种方法:

    (1)适用于当前项目

    1 第一步:项目->属性->C/C++->常规->附加包含目录(浏览.h文件的路径)   添加包含文件
    2 第二步:项目->属性->C/C++->链接器->输入->附加依赖项(写入lib的名称) 添加库文件
    3     项目->属性->C/C++->链接器->输入->附加依赖项          添加用到的lib 
    4 第三步:在要使用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路径

    (这些路径只告诉编译器怎么找文件,没有说把那里面的文件加入工程.)

    (若不设置,编译报错:无法打开***文件)。

    2. 加载dll

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

    3.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头文件

  • 相关阅读:
    Leetcode 349. Intersection of Two Arrays
    hdu 1016 Prime Ring Problem
    map 树木品种
    油田合并
    函数学习
    Leetcode 103. Binary Tree Zigzag Level Order Traversal
    Leetcode 102. Binary Tree Level Order Traversal
    Leetcode 101. Symmetric Tree
    poj 2524 Ubiquitous Religions(宗教信仰)
    pat 1009. 说反话 (20)
  • 原文地址:https://www.cnblogs.com/supercxm/p/8473696.html
Copyright © 2011-2022 走看看