What's the difference between -rpath and -L?

GccLinkerShared LibrariesLd

Gcc Problem Overview


gcc and ld provide many ways to specify a search path for libraries—among them the -rpath and -L flags. The manpages reveal no differences between these two flags, effectively saying each flag adds a library to the library search path. Yet it seems strange that both flags do exactly the same thing. What are the differences, if any, between these two options?

Gcc Solutions


Solution 1 - Gcc

You must be reading some outdated copies of the manpages (emphasis added):

> -rpath=dir
>       Add a directory to the runtime library search path. This is used
>       when linking an ELF executable with shared objects. All -rpath
>       arguments are concatenated and passed to the runtime linker, which
>       uses them to locate shared objects at runtime.

vs.

> -L searchdir
> --library-path=searchdir
>       Add path searchdir to the list of paths that ld will search for
>       archive libraries and ld control scripts.

So, -L tells ld where to look for libraries to link against when linking. You use this (for example) when you're building against libraries in your build tree, which will be put in the normal system library paths by make install. --rpath, on the other hand, stores that path inside the executable, so that the runtime dynamic linker can find the libraries. You use this when your libraries are outside the system library search path.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCraig M. BrandenburgView Question on Stackoverflow
Solution 1 - GccderobertView Answer on Stackoverflow