This solves the ODR violations by exporting all symbols in the llvm namespace to
all users of liblldb, which can then avoid including their own copy of the llvm
libraries. The LLDB_EXPORT_ALL_SYMBOLS=OFF option then becomes purely a size
optimization for liblldb, and does not affect the way in which dependant
executables are linked, and we can even consider turning it off by default
(modulo backtrace(3) problems on Linux).
This effect of this on the SB API firewall is that it would turn it into a sort
of a gentlemans agreement: "If you only use the SB API of liblldb, we guarantee
ABI compatibility. If you don't care about that, you can use the llvm utilities
that are bundled in this library, but then don't blame us if your code gets
broken by an update."
This is my preferred solution. However, I am not sure if this will actually work
on Windows. AFAIK, there you have to specially annotate the API in order for it
to be exported, and I think llvm API don't have those annotations.
But you eliminate it here, don't you? (Maybe you just missed that I was also exporting the lldb_private symbols in the case of "LLDB_EXPORT_ALL_SYMBOLS:BOOL=YES"?)