Reputation: 14462
I have a system-wide libc++.so
in /usr/lib64
. I want to link my binary against another libc++.so
which is located somewhere else, say, in $HOME/.local/lib
. Also, I want to be able to find all other libraries the same way as before, assuming that $HOME/.local/lib
contains only libc++.so
.
I'm trying to do this like: clang++ -L$HOME/.local/lib -lc++
, but the compiler still links against /usr/lib64/libc++.so
.
How to force the compiler (or linker) to link against a specific library location?
Upvotes: 1
Views: 815
Reputation: 16737
-L
adds the directory to the search path used by the linker. This has no effect on the search paths used at runtime. At runtime, the search paths, in order, are:
LD_LIBRARY_PATH
rpath
specified in the executableWhile you can achieve what you want by specifying the environment variable LD_LIBRARY_PATH=$HOME/.local/lib
, it is a bad solution since it modifies the search paths of all executables. Specifying the rpath
is a much cleaner solution since it only affects the behaviour of your executable. You can do this through the linker option of your toolchain, which is likely -rpath
. So the command would be clang++ -rpath $HOME/.local/lib -lc++
.
Upvotes: 1