https://sourceware.org/bugzilla/show_bug.cgi?id=32083
Bug ID: 32083 Summary: lto1: fatal error: multiple prevailing defs for ‘func’ Product: binutils Version: unspecified Status: NEW Severity: normal Priority: P2 Component: ld Assignee: unassigned at sourceware dot org Reporter: hjl.tools at gmail dot com Target Milestone: --- When linker sees a common symbol, foo, if there is foo in an archive, linker calls elf_link_is_defined_archive_symbol to check if foo is a definition. Since elf_link_is_defined_archive_symbol calls plugin_object_p to check if the LTO plugin can claim the archive member. When plugin_call_all_symbols_read is called, all symbols from claimed LTO objects are returned, including the unused archive member. Since liby.a appears twice on the command line, we get ultiple prevailing defs error: [hjl@gnu-cfl-3 lto-2]$ cat exec.c #include <stdio.h> int foo; int main() { if (foo == 1) printf ("PASS\n"); return 0; } [hjl@gnu-cfl-3 lto-2]$ cat y.c int foo; void func (void) { } [hjl@gnu-cfl-3 lto-2]$ make y gcc -B./ -fcommon -flto -c -o exec.o exec.c gcc -B./ -fcommon -flto -c -o y.o y.c ar -rv liby.a y.o ar: creating liby.a a - y.o gcc -B./ -fcommon -flto -o y exec.o liby.a liby.a lto1: fatal error: multiple prevailing defs for ‘func’ compilation terminated. lto-wrapper: fatal error: gcc returned 1 exit status compilation terminated. ./ld: error: lto-wrapper failed collect2: error: ld returned 1 exit status make: *** [Makefile:20: y] Error 1 rm y.o [hjl@gnu-cfl-3 lto-2]$ -- You are receiving this mail because: You are on the CC list for the bug.