. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->综合研究
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  详解C语言中的lib文件以及tlib命令  [待解决] 回复[ 3次 ]   点击[ 974次 ]  
lwbfq
[帖 主]   [ 发表时间:2009-04-06 12:47 ]   [引用]   [回复]   [ top ] 
荣誉值:56
信誉值:0
注册日期:2008-01-19 13:58
  以前用过tlib命令,可是记性不太好,给忘了,不得不重新学习,为了以防以后有类似事情发生,特意写成文章,也给在这方面产生困惑的学习者一点帮助。

  在使用tc编写程序时,你或许对其中的*.lib文件产生疑问,这些lib文件有什么用途? 

  用C 语言编程时,通常要建立一些用户函数。如果这些函数具有通用性,一般的方法是将它们作成头文件,当需要时用“#include”命令将其包含到源程序之中,以提高编程效率。但在特定的程序中一般仅使用这些函数的一部分,若用上述方法包含所有函数,编译器在编译的时候会把所有包含进的函数都进行编译,这无疑会使源程序变得庞大而难于理解,并会影响执行效率。建立用户目标模块库(lib文件)可以解决这个问题,你可以事先把有特定功能的通用的子函数集编译完成后生成的obj文件打入lib文件,当链接器tlink.exe在进行链接操作时,便只会把程序内部用到的通用函数所在的obj文件链接进来(已验证:不能定位到具体函数),这样生成的obj文件便会更精简,生成的exe文件也更小。 

  其实,一个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文件列表。如果你新加入了一个obj文件,就能从生成的lst文件中找到对应的obj文件的名称,至于其它信息的具体含义,自己有时间再去研究。 

给个简单的例子: 
1:编写一个C程序,名称为goodluck.c,程序如下: 
void goodluck() 

  printf("Good Luck To You!");   

2:通过tcc.exe(在tc根目录下)对上述文件进行编译,命令格式为: 
tcc -c goodluck.c(-c 代表只进行编译操作) 
3:通过tlib命令把goodluck.obj添加到库文件(*.lib)cs.lib中。 
tlib cs.lib + goodluck.obj, cs.lst 
运行后用记事本查看cs.lst中的内容,查找goodluck,看是否已添加成功。 
4:添加成功后,再写一个C程序show.c 
main() 

    clrscr(); /*清屏*/ 
    goodluck(); 

看到的结果便是屏幕显示“Good Luck To You!”。
mywiil
[第1楼]   [ 回复时间:2009-04-07 08:37 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:4
注册日期:2008-10-14 16:29
好东西,顶!!
ilove
[第2楼]   [ 回复时间:2009-04-07 19:35 ]   [引用]   [回复]   [ top ] 
荣誉值:14
信誉值:2
注册日期:2008-10-19 21:37
好东东,收藏~\(≧▽≦)/~啦啦啦

多谢楼主呀~
yanjiajia
[第3楼]   [ 回复时间:2009-04-26 22:43 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-11-17 21:34
建议大家自己写个printf函数,替换掉cs.lib中的原printf函数,每次调用时可显示一句话!很有意思的
而且你可以自己建立一个属于自己的tc环境
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved