精华内容
参与话题
问答
  • 关于lib文件的介绍

    万次阅读 2017-10-23 21:48:50
    众所周知,出现.lib, .dll这种文件的原因是为了保护源代码,这个就不细说了。 ...用OpenCV的开源库来举个...staticlib文件夹里面放的才是真正的静态lib文件,和dll文件是独立的; 所以可以看出,lib文

    众所周知,出现.lib, .dll这种文件的原因是为了保护源代码,这个就不细说了。


    用OpenCV的开源库来举个例子看一下就知道了:


    bin文件夹里面放的都是dll文件;

    lib文件夹里面放的都是伴随dll文件的动态lib文件;

    staticlib文件夹里面放的才是真正的静态lib文件,和dll文件是独立的;


    所以可以看出,lib文件是有静态lib和动态llib之分的。

    第一部分:静态lib文件,动态lib文件和dll文件的区别:

    1. 静态lib文件

    上一篇文章讲过如何生成并调用lib文件,其实那个使用“static Library”选项生成的lib文件就是静态lib文件。我们已经知道,在调用这种类型的lib文件的时候,只需要配置好头文件.h的路径和库文件.lib的路径,自己的程序就可以正确加载这些第三方代码为自己所用。这是因为:


    静态lib文件实际上就是任意个obj文件的集合,而obj文件就是cpp文件编译之后产生的一种文件,一个cpp文件编译之后只会产生一个obj文件,而多个obj文件就可以连接生成lib文件。就像上一篇文章讲的那样,如果你工程里只有一个lib.h和lib.cpp,那么编译后产生的lib文件实际上就是lib.obj文件的一个集合,但是如果你工程里还有其他的很多个cpp文件,那么就会在编译之后生成许多obj文件,然后最终只链接生成一个lib文件。


    所以,静态lib文件实际上是包含了所有的导出声明和实现。你如果把这个lib文件链接到自己的程序之后,这个lib文件中的所有代码都会嵌入进来,哪怕你只用到了其中一部分,剩下没用到的也进了你的代码。这就不难想象会造成的后果了,虽然方便,但是如果大部分你都用不到,自然会导致你的库体积没有意义地变大,失去了使用动态库的灵活性,而且发布新的版本时必须要发布新的应用程序才行,而不是简单打个补丁就好。就是因为这种缺点,才会出现动态dll调用这种方式。(注:这世上所有事情的出现都是有理由的,如果静态lib能完成我们想要的功能,而没有缺点的话,就不会有第二种替代方案dll的出现!)


    2. 动态lib文件和dll文件

    把这两个放在一起来说,是因为一个dll工程生成一个dll文件的时候,总是伴随着生成一个lib文件,这个lib文件其实是一个动态的lib,它的大小比静态lib要小很多,因为这个lib文件其实只是包含了一些函数索引信息,记录了dll中那些函数的入口和位置,dll中才是具体的函数实现。那么为什么有了dll,还要有一个lib呢?


    这就是动态库链接的过程了,首先配置好动态lib库目录和动态dll目录,以及头文件的目录。(注:如何配置这些路径,请移步《以OpenCV库为例讲解如何在VS中配置第三方库》)然后在你的代码中include用到的头文件,代码完成之后有两个过程:(1)编译:这个过程只需要用到这里的动态lib文件【注:在静态lib的情况下,仍然只是在编译阶段用到lib文件,只不过静态lib文件包含了完整的实现,所以编译生成exe之后就可以直接用了而已】,然后和你的代码打包到一起。(2)运行:这个过程就需要用到dll文件了,上面打包好的东西里面,只是记录下了那些用到的函数的入口和具体位置,并没有真正的实现代码,所以在运行期间,就由那些入口找到正确的位于dll中的位置,然后直接执行那些函数就行了。


    从上面过程中也可以看出一个很清楚的事实:dll其实就是exe,只不过它没有main函数,所以不能单独执行而已。事实上, 在实际的使用过程中我们也发现,很多应用程序都并不是一个完整的单独可执行文件,它们被分割成一些单独的相对对立的动态链接库,只有在执行应用程序的时候,用到的dll才会被调用。这也就是为什么你经常打开某些程序,会出现“无法加载XXX.dll”的原因了(微笑脸。


     第二部分:静态lib和动态dll使用注意事项

    通过第一部分的叙述,我们可以总结如下:

    1. 调用静态lib库,需要用到的文件是:

    (1).h文件,包含函数的声明,数据结构等东西,在调用lib的时候,需要把该头文件包含进你的代码;

    (2).lib文件,包含具体的实现。


    2. 调用动态dll库,需要用到的文件是:

    (1).h文件,如上,同样需要包含到你的代码;

    (2).lib文件,包含一些函数的入口和具体位置,必须在编译阶段引入这个文件,否则会报错。【根据查到的资料,如果没有这个动态lib文件或者不想用lib文件,需要用Win32的API函数LoadLibrary和GetProcAddress来装载】

    (3).dll文件,实际的实现,在程序运行时动态调用。


    正常情况下,你发行一个软件的过程应该是这样的:(最好选用第二种动态调用dll的方式)

    你的项目分成独立的几个模块,每个模块都有一个dll文件,然后有一个最终的程序入口exe文件,最后把dll文件和exe文件发行给用户。当用户每次点击这个exe文件的时候,自然会动态调用用到的dll文件。注意这个过程就不再需要什么.h和.lib了,那是别人调用你的库,再进行加工写代码时才需要做的事。上面说过dll其实就是个不能单独打开执行的exe而已,所以你最终发行给用户的只能是dll和exe,当然你完全可以把所有的东西只打包在一个exe中。但是当你的软件非常大的时候,这样进行更新维护就非常不方便,如果有问题就得重新发行一次exe,但是如果把各个模块单独弄成dll,你只需要打个补丁,对那些有问题的dll进行更换就行了。


    另外一个是把你的dll写好给别人拿来调用,以免别人做重复的工作。这个时候你刚开始提供的时候,就需要把.h文件,.lib文件,.dll文件都提供给对方,然后如果你代码里面有改动,只需要重新编译一次dll给对方,替换掉原来的dll就可以了,非常方便!!!当然前提是,你的函数接口写得好。进行修改时只需要修改内部实际的代码,并不需要对接口改来改去!


    第三部分:调用方法

    1. 静态lib库的调用方法

    (1)添加工程的头文件目录:项目---属性---配置属性---C/C++----附加包含目录,在这个地方加上头文件的存放路径;

    (2)添加工程的静态库文件目录:项目---属性---配置属性---链接器---常规---附加库目录,在这个地方加上lib文件的存放路径;

    (3)添加工程引用的lib文件名:项目---属性---配置属性---链接器---输入---附加依赖项,把用到的lib的名字都输入到这里。


    原文出处:http://blog.csdn.net/woainishifu/article/details/53505866

    展开全文
  • 原文地址:http://www.jb51.net/article/36447.htm两种库:• 包含了函数所在的DLL文件文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。• 包含...

    原文地址:http://www.jb51.net/article/36447.htm


    两种库:

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

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

    --------------------------------------------------------------------------------

    两种文件的区别

    --------------------------------------------------------------------------------

    使用lib需注意两个文件:

    •.h头文件,包含lib中说明输出的类或符号原型或数据结构。应用程序调用lib时,需要将该文件包含入应用程序的源文件中。
    •.LIB文件。

    使用dll需注意三个文件:

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

    --------------------------------------------------------------------------------

    生成和使用方法

    --------------------------------------------------------------------------------

    操作系统:WIN7

    开发软件:VS2010

    --------------------------------------------------------------------------------

    1.生成lib文件

      首先,我们先建立一个控制台工程(新建->工程->控制台程序),添加add.cpp以及add.h文件。

    复制代码 代码如下:

    //sub.h
    #ifndef _SUB_H
    #define _SUB_H
    void sub(int a,int b);
    #endif

    //sub.cpp
    #include "sub.h"
    #include <iostream>

    void sub(int a,int b)
    {
        std::cout<<(a-b)<<std::endl;
    }

      由于在工程中,没有main()函数,所以直接编译出错。这时,要右键点击工程,并选择工程属性,出现下图,选择静态链接库即可。

      这时候再按F7,build solution即可产生lib文件。在Debug中只生成.lib文件。

    2.生成dll文件

      生成dll文件的过程与上面的过程是一样的,只是在选择Dynamic Library(.dll)即可。在Debug中会生成一个.lib和.dll两种文件。

    --------------------------------------------------------------------------------

    3.两种文件的使用

      在使用时,静态链接库只要把.h和.lib文件加入到工程文件夹中即可。而动态链接库要把.h、.lib和.dll文件加入到工程中。

    复制代码 代码如下:

    #include <iostream>
    #include "sub.h"  //链接库的头文件
    using namespaces std;

    #pragma comment(lib,"sub.lib") //加入链接库

    int main()
    {
        sub(5,4);
        return 0;
    }


    4.仅有.dll文件时候的使用方法

      在没有.h和.lib文件时,需要函数指针和WIN32 API函数LoadLibrary、GetProcAddress装载,只需要.dll文件即可(将.dll文件置入工程目录中)。

    复制代码 代码如下:

    #include <iostream>
    #include <windows.h>               //使用函数和某些特殊变量
    typedef void (*DLLFunc)(int,int);  //确定调用函数的形参
    int main()
    {
        DLLFunc dllFunc;
        HINSTANCE hInstLibrary = LoadLibrary("sub.dll");//加载.dll

        if (hInstLibrary == NULL)
        {
            FreeLibrary(hInstLibrary);
        }
        dllFunc = (DLLFunc)GetProcAddress(hInstLibrary, "sub");//第二个参数为要调用的函数名称
        if (dllFunc == NULL)
        {
            FreeLibrary(hInstLibrary);
        }
        dllFunc(5,4);
        FreeLibrary(hInstLibrary);
        return(1);
    }


    展开全文
  • bin文件夹和lib文件夹

    千次阅读 2019-03-23 21:47:19
    lib文件夹里是库文件 以mysql为例:lib文件夹中有以下文件 l libmysql.dll是mysql的动态链接库文件 即以.dll为后缀名的文件是动态链接库 libmysql.lib是mysql的静态数据链接库 即以.lib为后缀名的是静态链接库...

    bin文件夹里是可执行的二进制文件

    lib文件夹里是库文件

    以mysql为例:lib文件夹中有以下文件

     

    l

     libmysql.dll是mysql的动态链接库文件  即以.dll为后缀名的文件是动态链接库

    libmysql.lib是mysql的静态数据链接库  即以.lib为后缀名的是静态链接库

    libmysql.pdb是程序数据库文件

    展开全文
  • 如何查看 lib 文件

    千次阅读 2014-02-07 12:47:35
    你是用什么开发工具? VC的话进入命令行方式(如VS2005:菜单上有Visual ...然后进入你lib所在目录(用cd ....)就可用dumpbin了 lib就是obj打包而已,可以试试用dumpbin列一下内容 dumpbin /all ansiibf.lib

    你是用什么开发工具?
    VC的话进入命令行方式(如VS2005:菜单上有Visual Studio 2005 命令提示)
    然后进入你lib所在目录(用cd ....)就可用dumpbin了


    lib就是obj打包而已,可以试试用dumpbin列一下内容



    dumpbin /all ansiibf.lib



    展开全文
  • 从DLL导出LIB文件

    千次阅读 2019-06-06 11:20:03
    Q:从动态链接库DLL文件导出LIB文件 详情: 在Windows开发sqlite相关程序时,自己编译SQLite源码以生成dll或lib还是比较麻烦的,所以直接下载sqlite-dll-******.zip。这个包解压出来只包含sqlite3.dll和sqlite3.def...
  • 如何查看 lib 文件

    千次阅读 2018-11-18 02:42:10
    如何查看 lib 文件
  • lib文件格式

    千次阅读 2018-01-28 15:15:55
    ...我们在连接程序时,不仅仅要用到目标文件,库文件也是必不可少的。  库文件是怎么样的结构呢?  其实,库文件的结构也很简单。它就是“一堆”目标文件的集合。把目标文件做成库以后,我
  • VS 2015添加静态库.lib文件的步骤

    千次阅读 2017-07-13 11:51:48
    1.新建一个项目。 2.右键该项目 ---->属性...3.右键该项目 ---->属性---->配置属性---->链接器---->常规--->附加库目录,在这里将.lib文件所在的目录路径添加进来 4.右键该项目 ---->属性---->配置属性---->链接器---
  • .lib文件详解

    千次阅读 2013-06-19 14:26:38
    lib文件通过编译才可以使用编译分静态与动态之分。 静态编译 静态lib将导出声明和实现都放在lib中。编译后所有代码都嵌入到宿主程序 动态编译 动态lib相当于一个h文件,是对实现部分(.d
  • VS中添加lib文件,以及出现LINK : fatal error LNK1104: 无法打开文件:×××.lib的解决办法
  • 在一个vs工程中,编译生成一个lib文件,这个lib文件需要依赖其他的多个lib文件,这个编译生成的lib文件需要在其他工程中用到,怎样在这个工程中只需要导入这个编译新生成的lib就可以了?而不需要在这个工程中导入它...
  • linux下的lib文件

    万次阅读 2010-09-23 16:08:00
    随着Linux性能的不断提升和逐渐普及,会有越来越多的人在Linux下从事应用软件的开发。这里笔者根据从事Linux应用程序开发的经验,介绍Linux编程库使用的一些基础知识。 <br /> 库的定义和种类 <br /> ...
  • 我用了reimp.exe想把.lib文件改为.a文件,但是生成的.a文件是0字节的,请问该怎样将.lib文件改为.a文件?而且我试过直接将.lib的后缀文件名直接改为.a,但只有几个文件成功了, 还有一些其他的.lib不能这样直接改。
  • C#不能调用C/C++lib文件的函数,但能调用dll文件的函数。可是现在的情况是,我只有一个lib文件,函数的实现都在里边了。能不能把lib变为dll呢?答案是肯定的。 要把lib编译为dll大概有三种方法吧: 第一种,就是...
  • lib文件格式分析

    千次阅读 2013-08-01 22:26:56
    lib文件最开头,由8个字符串开始,值为“!\n”。接下来由4个不同类型的区段组成(不是四个区段),依次排列下来是First Section(一个), Second Section(一个), Long Section(一个), Obj Section(包含有多少个...
  • 最近在学习ida,有时候需要从lib文件里面提取sig,方便我们查看函数的名称。但是手工的办法只能一个个obj提取,虽然可以使用批处理,但是偶尔碰到错误的coff文件,还是需要人手工干预,所以写了这么一个小工具,顺带...
  • 如何写自己的lib文件并测试

    千次阅读 2015-11-26 18:29:07
    1、在VS中新建一个win32工程,建立时选择静态库,如图: ...3、新建一个GetImageName.h文件和一个GetImageName.cpp文件 GetImageName.h文件 #ifndef GET_IMAGE_NAME_H_ #define GET_IMAGE_NAME_H_
  • sqlite-dll-win32-x86-3080803中只有sqlite3.def和sqlite3.dll没有sqlite3.lib文件,怎么用呢? 其实LIB文件和DLL文件是差不多的,只是使用的时间不同。LIB文件(此时称为导入库)使用在编译阶段,DLL文件使用在...
  • vs2010环境下生成lib文件 使用lib文件

    千次阅读 2015-06-25 19:27:15
    1,新建win32工程,选中lib项目:如图: 2,然后在工程项目中lib.h添加如下代码: #ifndef LIB_H #define LIB_H ...3,在项目中添加lib.cpp文件,代码如下: #include "lib.h" int add
  • 当想把一个实现的代码较多的功能加入到一个项目中,把这个功能做成一个LIB文件,然后引入到项目中直接调用,是最方便和简洁的。 图1    编译之前要设置编译选项,设置的依据是要引入的项目编译选项。下图
  • #define vtkRenderingCore_AUTOINIT 4(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingFreeTypeOpenGL,vtkRenderingOpenGL) #define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL) ...
  • dll文件导出对应的lib文件

    千次阅读 2016-02-29 11:22:37
    在Windows平台上使用MSYS编译一些开源代码时经常只会生成DLL文件,而如果打算在VS中使用该DLL则需要有对应的LIB文件,下面以编译oRtp为例来看看如何从DLL文件中导出LIB文件。 需要进过两个步骤:由DLL文件生成def...
  • VC++中生成DLL和LIB文件

    千次阅读 2009-05-09 22:20:00
    1.概论 先来阐述一下DLL(Dynamic Linkable Library)的...静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不
  • 但是发现在Debug模式下连接出错,提示无法打开cxxd.lib文件,通过查看mpich2的lib文件中确实没有cxxd.lib,只有cxx.lib。又搜到了网上有人发的:http://blog.sina.com.cn/s/blog_4cb73187010168ew.html。其中提到了...
  • 我们利用OpenCV编程的时候一般需要关联多个lib文件,如果发布程序,不仅需要发布我们自己生成的lib,还需要将这些lib一起带过去。那么有没有一种可以将这么多lib文件一起打包在一起的方法呢? 比如我的程序用到了这...
  • 由.def文件生成lib文件

    千次阅读 2013-08-01 21:42:05
    最近在学习curl库时,碰到一个问题,从官网上下载了一个lib版的,却发现只有.dll,没有lib文件,感觉很奇怪,google了之后才知道,原来库作者的用意是让用户自己生成lib文件,下载到的lib文件中含有.def文件。...
  • VS2015 生成.lib文件

    千次阅读 2017-01-04 16:17:42
    1、File->New->Project如下图: ...Ok之后,在向导中,选lib,如下图: 2、建文件,结构如下图: 3、运行、点击如下按钮: 4、打开项目文件夹,得到文件:如下图 这样就OK了。
  • opencv 所有lib文件

    千次阅读 2016-11-22 10:35:57
    今天在vs上写一段代码,编译后总是显示有无法解析的函数,又不知道该函数在哪个lib文件中,在百度上找了半天,也没找到。已是就将所有lib库都添加到vs链接中。如下: opencv_calib3d2410d.lib opencv_contrib2410d....
  • 创建.lib文件及其使用

    千次阅读 2010-01-29 11:46:00
    .lib文件可以让别人来调用你的工程,但是只能允许C++调用,而且需要同时提供所要使用类的头文件以及该工程的.lib文件。有两个工程 project A & project B,project A 中有类class a。现在想要在project B中使用类a的...
  • 详解C语言中的lib文件以及tlib命令

    千次阅读 2009-10-08 23:12:00
    在使用tc编写程序时,你或许对其中的*.lib文件产生疑问,这些lib文件有什么用途? 用C 语言编程时,通常要建立一些用户函数。如果这些函数具有通用性,一般的方法是将它们作成头文件,当需要时用“#include”命令...

空空如也

1 2 3 4 5 ... 20
收藏数 1,734,991
精华内容 693,996
关键字:

lib文件