mold: mold: error: duplicate symbol when linking libstdc++

I see the following error for current mold master:

/dev/shm/objdir/./gcc/xgcc -shared-libgcc -B/dev/shm/objdir/./gcc -nostdinc++ -L/dev/shm/objdir/x86_64-pc-linux-gnu/libstdc++-v3/src -L/dev/shm/objdir/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs -L/dev/shm/objdir/x86_64-pc-linux-gnu/libstdc++-v3/libsupc++/.libs -B/home/marxin/bin/gcc/x86_64-pc-linux-gnu/bin/ -B/home/marxin/bin/gcc/x86_64-pc-linux-gnu/lib/ -isystem /home/marxin/bin/gcc/x86_64-pc-linux-gnu/include -isystem /home/marxin/bin/gcc/x86_64-pc-linux-gnu/sys-include     -fPIC -DPIC -D_GLIBCXX_SHARED -shared -nostdlib /lib/../lib64/crti.o /dev/shm/objdir/./gcc/crtbeginS.o  .libs/compatibility.o .libs/compatibility-debug_list.o .libs/compatibility-debug_list-2.o .libs/compatibility-c++0x.o .libs/compatibility-atomic-c++0x.o .libs/compatibility-thread-c++0x.o .libs/compatibility-chrono.o .libs/compatibility-condvar.o  -Wl,--whole-archive ../libsupc++/.libs/libsupc++convenience.a ../src/c++98/.libs/libc++98convenience.a ../src/c++11/.libs/libc++11convenience.a ../src/c++17/.libs/libc++17convenience.a ../src/c++20/.libs/libc++20convenience.a -Wl,--no-whole-archive  -L/dev/shm/objdir/x86_64-pc-linux-gnu/libstdc++-v3/libsupc++/.libs -L/dev/shm/objdir/x86_64-pc-linux-gnu/libstdc++-v3/src -L/dev/shm/objdir/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs -lm -L/dev/shm/objdir/./gcc -L/lib/../lib64 -L/usr/lib/../lib64 -lc -lgcc_s /dev/shm/objdir/./gcc/crtendS.o /lib/../lib64/crtn.o   -Wl,-z -Wl,relro   -Wl,-soname -Wl,libstdc++.so.6 -o .libs/libstdc++.so.6.0.30
mold: error: duplicate symbol: ../src/c++17/.libs/libc++17convenience.a(fs_path.o): ../src/c++17/.libs/libc++17convenience.a(fs_dir.o): std::_Sp_make_shared_tag::_S_ti()::__tag
mold: error: duplicate symbol: ../src/c++17/.libs/libc++17convenience.a(cow-fs_dir.o): ../src/c++17/.libs/libc++17convenience.a(fs_dir.o): std::_Sp_make_shared_tag::_S_ti()::__tag
mold: error: duplicate symbol: ../src/c++17/.libs/libc++17convenience.a(cow-fs_path.o): ../src/c++17/.libs/libc++17convenience.a(fs_dir.o): std::_Sp_make_shared_tag::_S_ti()::__tag

Note the symbols are:

           "u" The symbol is a unique global symbol.  This is a GNU extension to the standard set of ELF symbol bindings.  For such a symbol the dynamic linker will make sure that in the entire process there is just one symbol with this name and type in use.
nm ../src/c++17/.libs/libc++17convenience.a | grep _ZZNSt19_Sp_make_shared_tag5_S_tiEvE5__tag
0000000000000000 u _ZZNSt19_Sp_make_shared_tag5_S_tiEvE5__tag
0000000000000000 u _ZZNSt19_Sp_make_shared_tag5_S_tiEvE5__tag
0000000000000000 u _ZZNSt19_Sp_make_shared_tag5_S_tiEvE5__tag
0000000000000000 u _ZZNSt19_Sp_make_shared_tag5_S_tiEvE5__tag
c++filt _ZZNSt19_Sp_make_shared_tag5_S_tiEvE5__tag
std::_Sp_make_shared_tag::_S_ti()::__tag

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 20 (17 by maintainers)

Most upvoted comments

Thank you for confirming. I will release mold 1.0.2 maybe within this month.

Thanks. Now I can reproduce the issue locally.