I am trying to start a program that relies on some libraries that are in my path, however, the program says it cannot find the files:

11:45:27 ~ > echo $PATH

11:45:33 ~ > brains3
/home/mri/Software/BRAINS3/bin/brains3_real: error while loading shared libraries: libiplUtils.so: cannot open shared object file: No such file or directory

11:45:35 ~ > sudo find / -name libiplUtils.so
[sudo] password for mri: 

Does anybody have an idea how to fix this?

  • 1
    Libraries aren't looked for in $PATH - what's your OS? – Mat Feb 14 '13 at 16:58

You can specify the library search path with the environment variable LD_LIBRARY_PATH.

$ export LD_LIBRARY_PATH=/home/mri/Software/BRAINS3/lib
$ brains3

You shouldn't set this variable for your whole system. If you can't/don't want to install the software system wide you could create a wrapper script.


The dynamic linker searches for libraries en LD_LIBRARY_PATH.


Unix systems tend to sort different types of files into different directories. There are separate directories for executables (e.g. /usr/bin), documentation (e.g. /usr/man, /usr/info, …), native libraries (e.g. /usr/lib), Perl libraries (e.g. /usr/lib/perl5), and so on. Correspondingly, there are different path variables, all with the same syntax (colon-separated list of directories): PATH for executables, MANPATH for man pages, LD_LIBRARY_PATH for native libraries¹, PERL5LIB for Perl libraries, and so on.

For native libraries, there are system default libraries that are in the search path whether mentioned in the LD_LIBRARY_PATH environment variable or not. On Linux, these directories are listed in /etc/ld.so.conf (also, /lib and /usr/lib are always in the search path).

You therefore have several possibilities:

  • Add /home/mri/Software/BRAINS3/lib to /etc/ld.so.conf (Linux-specific, other unix variants may have a similar file). Run ldconfig to make the change take effect.
  • Add export LD_LIBRARY_PATH=/home/mri/Software/BRAINS3/lib in /etc/profile (applies to all users) or in ~/.profile (applies only to you).
  • Make a wrapper script:

    export LD_LIBRARY_PATH=/home/mri/Software/BRAINS3/lib
    exec /home/mri/Software/BRAINS3/bin/brains3 "$@"
  • Create symbolic links to the libraries in /home/mri/Software/BRAINS3/lib in another directory on the search path:

    ln -s /home/mri/Software/BRAINS3/bin/brains3/lib*.so.* /usr/local/lib/

¹ LD_LIBRARY_PATH is the name on most unix variants, but Mac OS X uses DYLD_LIBRARY_PATH instead.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.