无法解析的符号冲突会导致致命错误状态,并生成相应的错误消息。此消息指出符号名称和提供这些符号的文件的名称。不生成输出文件。虽然致命状态足以导致链接编辑终止,但会先完成所有输入文件的处理。在此方式下,可以标识所有致命解析错误。
当两个可重定位目标文件都定义相同名称的非弱符号时,就会出现最常见的致命错误状态:
$ 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.c 和 bar.c 具有相冲突的定义。因为链接编辑器无法确定哪个符号优先,所以链接编辑通常终止,并生成一条错误消息。可以使用链接编辑器的 -z muldefs 选项抑制出现此错误状态。此选项允许采用第一个符号定义。