选择题 30.  以下关于链接的描述中,错误的是______。
【正确答案】 D
【答案解析】 为了提高编程效率,通常会把一些公用函数制作成函数库,供其他程序使用。函数库分为静态库和动态库两种。静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被链接到目标代码中,而是在程序运行时才被载入,因此,在程序运行时还需要动态库存在。
   具体而言,静态库与动态库的区别如下:静态库在程序的链接阶段被复制到程序中,和程序运行的时候没有关系;动态库在链接阶段没有被复制到程序中,而是在程序运行时由系统动态加载到内存中供程序调用。使用动态库的优点是系统只需载入一次动态库,不同的程序可以得到内存中相同的动态库的副本,因此,节省了很多内存资源。
   通常,函数可以定义在3个地方:①程序自身;②静态库;③动态库。由于静态库需要通过链接进入程序,所以,函数定义在程序和静态库可以看成是一样的同名函数出现在程序和静态库中,一旦二者同时定义,会在链接时报重定义的错误。而当同名函数出现在动态库中时,尽管编译链接可以通过,但是调用时会出现函数的覆盖问题。
   那么,定义在以上3个地方的同名函数,会调用哪个函数呢?
   1)程序和静态库定义了同名函数,链接时会报重定义错误。
   2)程序和动态库定义了同名函数,会覆盖动态库中定义的函数。
   3)动态库中定义的同名函数,先链接覆盖后链接的函数。
   通过上面的分析可知,如果两个静态库都包含一个同名全局函数,它们不能同时被链接,而如果两个动态库都包含一个同名全局函数,则会出现函数的覆盖问题。所以,选项A、选项B、选项C都是正确的,只有选项D是错误的。