LLD and LLVM_LINK_LLVM_DYLIB

Hi all,

I recently gave LLD a try and it definitely works fine. However one cannot
build it together with LLVM_LINK_LLVM_DYLIB:
ELF/Driver.cpp and ELF/DriverUtils.cpp pull in llvm/Support/CommandLine.h
which defines the command line options so these global variables end up in
libLLVM-4.0svn.so via liblldELF.
If this shared library is then linked into bin/lld or bin/opt one gets
errors because of "Option '...' registered more than once" as they are also
present in the binaries themselves.

Is it possible to keep the global variables for command line options out of
libLLVM-4.0svn.so?

Regards,
Jonas

Hi Hahnfeld,

I just compiled with LLVM_LINK_LLVM_DYLIB enabled [1] and build lld with ninja lld. It built fine. What am I missing?

[1] $ cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DLLVM_ENABLE_THREADS=On -DLLVM_ENABLE_LLD=true -DLLVM_LINK_LLVM_DYLIB=true -DLLVM_ENABLE_PROJECTS=‘clang;lld’ …/llvm-project/llvm

It builds fine but I cannot execute the resulting binary which aborts with the mentioned error.
However I don’t use LLVM_ENABLE_PROJECTS, I don’t know if that changes the way libLLVM-4.0svn.so is linked…

Cheers,
Jonas

Thanks for the info. I can reproduce the issue. But because of lack of cmake knowledge, I don’t know how to fix that now. If no one will take a look at this, I’ll investigate it.

I've dealt with similar issues on the LLDB side, I think I can help
you with this.

pl

Try if https://reviews.llvm.org/D28397 does the trick for you.

Wow, that was fast! Unfortunately I probably won't have enough to time to test
again until mid of next week :-/