Wow, that’s interesting! Thank you for hint, Anton!
How did this dependency come into the build? I don’t see any direct references to the symbol… so, is it something acquired transitively?.. I am surprised that some (supposedly portable) code contains a buried libgcc dependency… I’m not linking binary artifacts here…
Wow, that's interesting! Thank you for hint, Anton!
How did this dependency come into the build? I don't see any direct
references to the symbol... so, is it something acquired transitively?... I
am surprised that some (supposedly portable) code contains a buried libgcc
dependency... I'm not linking binary artifacts here...
__divmodti4 is a library function for "Divides 128-bit signed integers w/ remainder".
Presumably libc++ has some int128 division which generates the reference.
libc++ has int128 usage in chrono/filesystem/etc. I suspect chrono may
have int128 division, though I don't find the symbol in my build.
`clang -stdlib=libc++ a.o '-###'` prints the linker command line.
You should be able to find an argument -lgcc_s.
Adding -Wl,-t and removing `-###` should tell you which libgcc_s.so.1
file is picked.
You can dump its symbol table and inspect where __divmodti4 is there.
The issue comes down to the discrepancy between libgcc_s versions. I have an alternative compiler and that’s how Clang was built. That alternative compiler has the right support library:
$ nm /opt/gcc-11/lib64/libgcc_s.so.1 | grep __divmodti4
00000000000061d0 T __divmodti4