首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

链接器是依据什么把一个个.obj链接成一个.exe的

2014-01-14 
链接器是根据什么把一个个.obj链接成一个.exe的?链接器是根据什么把一个个.obj链接成一个.exe的?是根据入

链接器是根据什么把一个个.obj链接成一个.exe的?
链接器是根据什么把一个个.obj链接成一个.exe的?

是根据入口函数来判断,找到程序中所有要用到的函数,然后去这些函数所在的.obj,把这些函数链接起来形成一个.exe吗?
[解决办法]
被优化了。连接器只连接被使用的函数。

[解决办法]

引用:
Quote: 引用:

被优化了。连接器只连接被使用的函数。
链接器怎么判断一个函数是否被使用啊?

就是根据函数的名称。每个obj文件都有一个symbol table,里面记录了本文件中的全局函数及变量的名称和属性。
1. 连接器连接obj文件首先会检查所有obj文件中的symbol,如果发现重名的会报错。link error: redefined symbol!,然后把所有obj文件的symbol table合并(其中有些别的操作,太多了,略去了)。
2. 连接器然后检查所有被调用的函数是否存在于symbol table, 如果不存在则报错:link error: 
unresolved symbol。
编译器通过一个语法分析可以得到某个函数名称是否在某个函数调用语句中出现过,或者在一个赋值语句出现过(函数指针)。来确定函数被调用过。

热点排行