回 帖 发 新 帖 刷新版面

主题:link连接程序

我想问的问题假设有2个模块程序
如:template1 和 template2
若要在template1内调用template2的子程序
是不是需要在template1的最前面声明: extrn xxx:proc
在template2的最前面声明:           public xxx

另外需要将template2做成.lib,是不是用lib.exe
我用lib做了,但是每次都生成一个大小为1K的二进制文件,不多不少
而且也不会报告出错信息,我怀疑是不是做的不对

第三,在连接的时候link xxx.obj,会提示键入[.lib],我键入template2,
它将为我连接,这个时候lib是做为二进制文件被连接的,它和obj主要区别在那儿?

如果两个代码段连接后,执行完第一个的会跳到下一个模块内自己去执行
还是只能在主程序的代码段里通过CALL来转到第二个模块去工作??

如果谁能详细解释一下,请尽量通过文字说明,谢谢!

回复列表 (共1个回复)

沙发

如:template1 和 template2
若要在template1内调用template2的子程序
是不是需要在template1的最前面声明: extrn xxx:proc
在template2的最前面声明:           public xxx
------------------------------------------------
是的。不过不一定是最前面声明extrn,如果extrn在所有段的外面,表示该标识符可能在不同名段里,如果在段内,表示在同名段里。



另外需要将template2做成.lib,是不是用lib.exe
我用lib做了,但是每次都生成一个大小为1K的二进制文件,不多不少
而且也不会报告出错信息,我怀疑是不是做的不对
--------------------------------------------




第三,在连接的时候link xxx.obj,会提示键入[.lib],我键入template2,
它将为我连接,这个时候lib是做为二进制文件被连接的,它和obj主要区别在那儿?
-----------------------------------------------------------------
obj有intel的规范,还没见过lib有规范的。不过,鉴于tasm有不少东西是直接从masm那里过来的,它使用的lib跟masm的lib一样也不出奇。还没见过有介绍lib构造的文章。



如果两个代码段连接后,执行完第一个的会跳到下一个模块内自己去执行
还是只能在主程序的代码段里通过CALL来转到第二个模块去工作??
---------------------------------------------------------
这得看两个代码段的组合情况,如果是同名段,并且组合类型不是private,这两个代码段在编译时会被合并(public)或覆盖(common)为同一个段。如果不是同名段,那就必须通过段间调用或者段间转移来执行另一个段的代码。

我来回复

您尚未登录,请登录后再回复。点此登录或注册