How do you link to a specific version of a shared library in GCC
Question
I'm compiling some code which uses libcurl on a Debian Linux system. My dev machine is running Debian 5 but I want the binary to be usable on older Debian 4 systems too.
I find that if I specify -lcurl it will link to libcurl.so.4 but Debian 4 systems only have libcurl.so.3
Is there some way I can tell GCC to link to either libcurl.so.3 (which exists in both Debian 4 and 5) or just libcurl.so so it will use whatever version is available ?
Solution
You can pass the actual .so file instead of -l on the linker command line, and it ought to do what you want.
OTHER TIPS
Instead of using "-lcurl" use "-l:libcurl.so.3" And ofcourse also use "-L _installed_path_"
How about creating a symlink local to your project that links to .3, then you can just use -L at compile time. I'm not sure if you'd get a name conflict though, but you could always call it libcurl-old.so just in case.
I think the correct way to do that will be to use the --filter
and --auxiliary
flags of the linker.
They are not very documented, but should allow you to load symbols from different versions of the same library according to the machine you are installed on.