lib文件

来源:互联网 发布:php curl 上传图片 编辑:程序博客网 时间:2024/05/18 01:35

lib类型
  lib有静态lib和动态lib之分。
  

    在Windows上,lib的后缀为lib,在Linux上,静态lib的后缀为a和动态lib后缀为so。
lib使用
  静态lib将导出声明和实现都放在lib中。编译后所有代码都嵌入到宿主程序   动态lib相当于一个h文件,是对实现部分(.dll文件)的导出部分的声明。编译后只是将导出声明部分编译到宿主程序中,运行时候需要相应的dll文件支持   lib文件是不对外公开的,不能查看一个编译过后的文件   有几个选择:   1。如果你查看有同名的dll文件,可以通过vc自带的depends查看dll接口   2。通过msdn看你使用的该lib包含的函数名,来查找其对应的头文件,头文件里面有整个lib的函数声明(可能不全)   3。查看vc或者其他工具安装目录下的src目录,查看函数的代码   lib文件是二进制文件,所以要查看它的内容,只能反汇编。   用编程语言,打开lib文件的办法有三个:   1、在object/library modules使用全路径名;   2、把*.lib放在VC的Lib目录中   3、修改project setting的Link->Input中的Addtional library path,加入你的目录。   LIB文件是库文件(与DLL文件相类似),供其它程序调用的,直接打不开。


lib文件操作
  一个lib文件是obj文件的集合。当然,其中还夹杂着其他一些辅助信息,目的是为了让编译器能够准确找到对应的obj文件。我们可以通过tlib.exe(在tc2.0下的根目录)来对lib文件进行操作,你可以把自己生成的obj文件通过tlib命令加入到一个lib文件中,也可以把lib文件内的obj文件进行删除操作,还可以把内部的obj文件给提取出来。明白了lib文件的大致结构以及对它的具体操作,在学习C语言的过程中,就会又多了一个切入点对C语言具体实现进行研究。   在command下,把当前目录设置为tlib.exe所在目录,然后输入tlib命令回车,此时显示的内容就是对tlib命令的详细解释,语法如下:

   Syntax: TLIB libname [/C] [/E] commands, listfile

  libname library file pathname

  commands sequence of operations to be performed (optional)

  listfile file name for listing file (optional)

   A command is of the form: <symbol>modulename, where <symbol> is:

   + add modulename to the library

   - remove modulename from the library

  * extract modulename without removing it

   -+ or +- replace modulename in library

   -* or *- extract modulename and remove it

   /C case-sensitive library

  /E create extended dictionary

   具体解释:

   tlib libname [/C] [/E] commands, listfile

   /C:大小写敏感标志。该选项不常用,此参数为可选项。

   /E:建立扩展字典。建立扩展字典可以加速大的库文件的连接过程,此参数同样为可选项。

   操作命令(可选项):

   + obj文件名 把指定obj文件添加到lib文件中

   - obj文件名 把指定obj文件从lib文件中删除

   * obj文件名 导出指定的obj文件(导出后对应的obj文件在lib文件内仍然存在)

   -+ obj文件名 替换指定的obj文件(前提是在lib文件中存在与指定obj文件同名的obj)

   -* obj文件名 导出指定的obj文件(导出后把对应的obj文件从lib文件内删除)

   lib文件中obj文件列表(可选项)

   此参数说明了命令运行后,生成的对应lib文件的列表文件名。它记录了当前lib文件内obj文件列表


什么是lib文件,与dll的关系
  (1)lib是编译时需要的,dll是运行时需要的。   如果要完成源代码的编译,有lib就够了。   如果也使动态连接的程序运行起来,有dll就够了。   在开发和调试阶段,当然最好都有。

   (2)一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。

   (3)在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。从上面的说明可以看出,DLL和.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误。
在VC中加载LIB文件的几种方法?
①LIB文件直接加入到工程文件列表中
  在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add Files to Project"菜单,在弹出的文件对话框中选中要加入DLL的LIB文件即可。
②设置工程的 Project Setting
  打开工程的 Project Settings菜单,选中Link,然后在Object/library modules下的文本框中输入DLL的LIB文件。
③通过程序代码的方式
  加入预编译指令#pragma comment (lib,"*.lib"),这种方法优点是可以利用条件预编译指令链接不同版本的LIB文件。因为,在Debug方式下,产生的LIB文件是Debug版本,如Regd.lib;在Release方式下,产生的LIB文件是Release版本,如Regr.lib。   当应用程序对DLL的LIB文件加载后,还需要把DLL对应的头文件(*.h)包含到其中,在这个头文件中给出了DLL中定义的函数原型,然后声明。

原创粉丝点击