How can I force using a local library over the system library in linux?
I linked my executable explicitly to some .so files in my project/lib directory e.g. (../lib
When you link, specify the directory of the library and also use an rpath:
-Wl,-rpath,/absolute/path/to/your/library -L/absolute/path/to/your/library -llibrary
-L
tells the linker where to find your library at link time, and -rpath
tells it where to search for the library at runtime.
Note that -L
and -rpath
need the directory that contains your .so file, not the actual path of the library file itself.
I have to question why you want to use your own version of a library over a system-provided version (having multiple different versions floating around is nothing but a recipe for trouble and user confusion).
However, you should be able to export LD_PRELOAD=<path_to_your_shared_obj>
to force it to load your own version.
Note that no mechanism to override library versions will persist through any sort of privilege elevation (for example sudo
).