详解C语言中的lib文件以及tlib命令
2009-10-08 23:12
148 查看
在使用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!”。
用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!”。
相关文章推荐
- 详解swift和OC以及C语言的混编(不看后悔!)
- c语言内存占用区域,以及详解
- 关于C语言中不同类型的输出格式以及浮点数除法格式的显示详解
- 详解C语言的exp()函数和ldexp()函数以及frexp()函数
- C语言——常量指针、指针常量以及指向常量的指针常量三者区别详解
- c语言之简单的贪吃蛇 -- 详解以及源代码
- 详解C语言printf函数以及%占位符知识
- C语言中字符的输入输出以及计算字符个数的方法详解
- 详解swift和OC以及C语言的混编
- 什么是对齐,以及为什么要对齐:C语言字节对齐详解
- C语言中的指针以及二级指针代码详解
- 详解keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法!
- 详解C语言编程中的函数指针以及函数回调
- C语言存储空间布局以及static详解
- Linux下的ls命令详解以及C语言实现
- android shape的使用详解以及常用效果(渐变色、分割线、边框、半透明阴影效果等)
- sql distinct详解以及优化
- 小结 | C语言输入输出函数详解
- 基于C语言中段错误的问题详解
- 关于Xcode更新之后插件失效以及安装失败详解