obj文件的连接问题以及tlib的基本用法

obj文件的连接问题以及tlib的基本用法

tcc将程序编译为.obj文件。

这里也可以使用tcc -linclude run.c来将run.c文件编译成run.obj文件。

再用tcc对下面的程序进行编译链接,发现提示错误:

obj文件的连接问题以及tlib的基本用法

obj文件的连接问题以及tlib的基本用法

提示标志f在程序中未定义。这说明如果程序里出现未定义的变量或函数,编译器能够正常将原文件编译成.obj文件,只是会提示而已。

要怎么生成正确的exe文件呢,我们要把run1.c中未定义的f函数链接进来,但是我们之前的链接都是链接的系统提供的相关文件,怎么链接自带文件呢?我们先研究一下tlib.exe

tlib.exe使用方法如下;

obj文件的连接问题以及tlib的基本用法

即使用tlib的格式为tlib libname [/C] [/E] commands, listfile

libname:要建立的用户目标模块库,缺省的扩展名为.LIB

/C:大小写敏感标志。该选项不常用。

/E:建立扩展字典。建立扩展字典可以加速大的库文件的连接过程。 

commands: 操作列表,由若干个动作符以及每个动作符后面的文件名或模块名组成。TILB支持的动作符有5种:“+"、“-"、“*"、“-*"或“*-"、“-+"或“+-"。“+"是把指定的文件加到指定的库中; “-"从库中删除指定的模块;“*"将相应的模块从库中抽取并写到指定的文件中,原库不变;“-*"或“*-"是将库中指定的模块拷贝到指定的文件中,然后把该模块从库中删除;“-+"或“+-"是将指定的模块用指定的文件或模块代替

Listfile:建立列表文件。列表文件按字母顺序将库中各模块列表,为文本文件,可用DOSTYPE命令查看。

那么将含有f函数的run.obj添加到cs.lib里的语句如下:

之后用tcc编译链接文件run1.c,没有出现错误提示。用debug加载生成的exe文件:

这是main函数的代码

这是f函数的代码

所以,我们将函数f写在程序run.c中,编译成run.obj,再将run.objtlib链接入cs.lib,这样tcc编译时发现原文件中没有定义函数f,就会在c语言默认的函数库cs.lib中寻找,找到后将其链接,生成run1.exe文件,所以我们在run1.exe文件中可以看到函数f的代码,它是在tlink连接时加入的。

tlib cs.lib cs.txt可以在cs.txt或者cs.lst文件中导入cs.lib的函数的目录。

obj文件的连接问题以及tlib的基本用法

将此程序编译成f.obj,并加入cs.lib中。

obj文件的连接问题以及tlib的基本用法

将上面的程序编译链接成b.exe,用debug加载:

Main函数的内容为:

obj文件的连接问题以及tlib的基本用法

obj文件的连接问题以及tlib的基本用法

f1函数的内容为:

obj文件的连接问题以及tlib的基本用法

f2函数的内容为:

obj文件的连接问题以及tlib的基本用法

函数func的内容为;

obj文件的连接问题以及tlib的基本用法

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a7f9f447809065814827a5340625d40d.html