Linking static libraries with clang independent of order

Mokosha picture Mokosha · Sep 23, 2014 · Viewed 7.9k times · Source

In GCC, I can use the linker flags -Wl,--start-group and -Wl,--end-group to resolve linking problems with libraries that have circular dependencies. I'd like to do the same with clang, but it seems like this feature was dropped in lld version 3.2. How do I do it?

Answer

user1225999 picture user1225999 · Oct 14, 2014

The release notes of LLVM 3.2 state that

llvm-ld and llvm-stub have been removed, llvm-ld functionality can be partially replaced by llvm-link | opt | {llc | as, llc -filetype=obj} | ld, or fully replaced by Clang.

By default clang seems to use the system linker. That is on Linux for example it uses the GNU ld:

$ clang --version
clang version 3.2 (branches/release_32 170558)
...
$ clang -Wl,--verbose
GNU ld (GNU Binutils; devel:gcc / openSUSE_12.3) 2.24.0.20140403-196
...

This suggests that you can use -Wl,--start-group and -Wl,--end-group as with GCC.