I am building an application using a framework called ohNet.
After building the framework, there is the possibility to install the framework via
error while loading shared libraries: libohNet.so: cannot open shared object file: No such file or directory
This is a runtime error, not a build error. Setting the
-L flag does nothing for the runtime linker. What you need to do is to tell the runtime loader to also look in /usr/local/lib for libraries. You can do that in two ways. The first is to add the path to the
LD_LIBRARY_PATH environment variable:
The second is to update the configuration file of the runtime linker. This can happen either in the /etc/ld.so.conf file, by putting the line:
somewhere in that file, or by creating a new *.conf file in the /etc/ld.so.conf.d/ directory that contains the new path. For example:
in it. This is the recommended way of doing this, as it allows you to keep your custom library paths separate from paths set by the system. (The "99" prefix is there to make sure the file is loaded last compared to other files there, so that it won't preempt system paths that could contain the same libraries.)
After you modify/create the file in /etc, you need to run:
as root for the change to take effect. (This command updates the /etc/ld.so.cache file, which is the actual file used by the runtime linker.)
There's also another way for a binary to find needed libraries at runtime. You can actually hard-code library paths into the executable itself. This is accomplished by setting a so called "rpath". This is a linker option and must be passed from gcc (or g++) to the linker, so the
-Wl option has to be used. The linker option is
-rpath=PATH. So you would need to add this to your link flags:
I don't recommend this for your case though. An rpath is useful when you're shipping libraries together with your executable (maybe with an installer), and a relative rpath (using the
rpath $ORIGIN feature) or absolute one (for when you install in /opt, for example) is then used to find those bundled libs at runtime.