链接程序和库指南

已记录名称冲突

使用共享库创建动态可执行文件或其他共享库时,链接编辑器会执行多项一致性检查。这些检查可确保输出文件中记录的任何依赖项名称都是唯一的。

如果用作链接编辑的输入文件的两个共享库包含相同的 soname,则会出现依赖项名称冲突。 例如:


$ cc -o libfoo.so -G -K pic -h libsame.so.1 foo.c

$ cc -o libbar.so -G -K pic -h libsame.so.1 bar.c

$ cc -o prog main.o -L. -lfoo -lbar

ld: fatal: recording name conflict: file `./libfoo.so' and \

    file `./libbar.so' provide identical dependency names: libsame.so.1

ld: fatal: File processing errors. No output written to prog

如果某个没有已记录 soname 的共享库的文件名与同一链接编辑过程使用的其他共享库的 soname 匹配,则也会出现类似的错误情况。

如果要生成的共享库的运行时名称与它的某个依赖项匹配,则链接编辑器也会报告名称冲突。


$ cc -o libbar.so -G -K pic -h libsame.so.1 bar.c -L. -lfoo

ld: fatal: recording name conflict: file `./libfoo.so' and \

    -h option provide identical dependency names: libsame.so.1

ld: fatal: File processing errors. No output written to libbar.so