Monday, August 18, 2008

Linux shared object (.so)

Search path the linker uses to locate shared object files (Following content is from manual of command ld):
"1.  Any directories specified by -rpath-link options.
2.  Any  directories  specified  by -rpath options.  The difference between -rpath and -rpath-link is that directories specified by -rpath  options are included in the executable and used at run-time, whereas the -rpath-link option is only effective at link time. It is for the native linker only.
3.  On  an  ELF system, if the -rpath and "rpath-link" options were not used, search the contents of the environment variable "LD_RUN_PATH". It is for the native linker only.
4.  On  SunOS, if the -rpath option was not used, search any directories specified using -L options.
5.  For a native linker, the contents of the  environment  variable "LD_LIBRARY_PATH".
6.  For  a  native  ELF  linker, the directories in "DT_RUNPATH" or "DT_RPATH"  of  a  shared  library  are  searched  for shared libraries  needed  by it. The "DT_RPATH" entries are ignored if "DT_RUNPATH" entries exist.
7.  The default directories, normally /lib and /usr/lib.
8.  For  a  native  linker  on  an  ELF system, if the file /etc/ld.so.conf  exists,  the list of directories found in that file."

Resources
A good tutorial about static, shared dynamic and loadable linux libraries
A Chinese post introducing using and generation of linux shared object libraries
List of GNU tools which manipulate linux libraries