例:
学生: 我的程序编译没错,为什么系统说不能连接,不能产生可执行程序?
老师: 那说明程序的外部变量、函数的名字方面出了些问题。这些问题比较简单,但修改时也要特别小心,不要把其他正确的东西改错了。
连接是编译完成后的下一个程序加工步骤。在这个步骤中,连接程序的工作对象是:
1)由你所编写的程序源文件产生的目标文件(一个或者几个);
2)语言系统提供的一些目标代码文件,包括基本运行模块(也称为运行系统)和库文件。
连接程序的工作包括两部分:
1)将所有需要的目标代码拼装到一个文件中(这是最后可执行文件的基础);
2)将外部对象的使用和定义连接起来,包括所有函数调研的实际调用代码的建立,正确设置所有外部变量的使用。
连接错误有两类:
1)缺定义。当程序中出现对某个外部对象的使用,而连接程序找不到对应的定义时,将产生这个错误。
2)重复定义。当被连接的各个部分中出现某个名字的多个定义时,将产生这个错误。
缺定义错误的常见原因:
1)名字拼写错误。例如将 main 拼写为 mian,连接时就会产生缺定义的连接错误。因为程序的基本允许模块里有一个对 main 的调用,连接程序需要找它的定义而没有找到。调用自己的函数名字写错的情况也很常见。
2)真的就是没有定义。例如你想调用一个非标准的C库函数,而你所用的系统里没有。或者是你要调用的自定义函数忘了定义。有时也有这样的情况,系统里有这个函数,但需要特别设置才能够找到它(因为函数放在某个非标准的库文件里),解决这种问题需要查阅有关的系统手册,这里不讨论了。
如果真是缺了定义,那就只能设法补上。
|