链接程序和库指南

致命解析

无法解析的符号冲突会导致致命错误状态,并生成相应的错误消息。此消息指出符号名称和提供这些符号的文件的名称。不生成输出文件。虽然致命状态足以导致链接编辑终止,但会先完成所有输入文件的处理。在此方式下,可以标识所有致命解析错误。

当两个可重定位目标文件都定义相同名称的非弱符号时,就会出现最常见的致命错误状态:


$ cat foo.c

int bar = 1;



$ cat bar.c

bar()

{ 

        return (0);

}



$ cc -dn -r -o temp.o foo.c bar.c

ld: fatal: symbol `bar' is multiply-defined:

        (file foo.o and file bar.o);

ld: fatal: File processing errors. No output written to int.o

对于符号 bar 来说,foo.cbar.c 具有相冲突的定义。因为链接编辑器无法确定哪个符号优先,所以链接编辑通常终止,并生成一条错误消息。可以使用链接编辑器的 -z muldefs 选项抑制出现此错误状态。此选项允许采用第一个符号定义。