What should I do if the Linux dynamic library cannot be found?
Solution to the problem that linux cannot find the dynamic library
Dynamic library is a shared library. When it comes to the problem of linux not being able to find the dynamic library, we must first understand Features of dynamic libraries:
Recommended: "linux tutorial"
● Dynamic libraries defer link loading of some library functions to the program period of operation.
● Can realize resource sharing between processes. (So dynamic libraries are also called shared libraries)
● Make it easy to upgrade some programs.
● Even the link loading can be completely controlled by the programmer in the program code (explicit call).
As can be seen from the first point above, the dynamic library does not package the library files into the program in binary form like the static library, but dynamically when the program runs to the time when the corresponding library function needs to be called. Load the dynamic library. At this time, the system only knows the name of the dynamic library, but does not know the absolute path. At this time, the system dynamic loader (dynamic linker/loader) is needed; for the elf executable program, it is used by ld-linux.so To complete, it successively searches the DT_RPATH section of the elf file (uncontrollable) => Environment variable LD_LIBRARY_PATH => /etc/ld.so.cache file list => /lib/ and /usr/lib directories to find the library file and load it. Memory.
Then what we need to do is to add the absolute path of the directory where the dynamic library is located to any sequence of the dynamic loader search sequence. Here is the specific implementation method:
Method 1: Copy Go to /lib or /usr/lib for your own shared libraries, not recommended
Method 2: Add the absolute path of the directory where the dynamic library is located to the system environment variable
2.1. Add the dynamic library The absolute path of the directory is temporarily added to the environment variable (it becomes invalid when the terminal is closed)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/chiliast/homework/day03/shared/lib
2.2. Set the absolute path of the directory where the dynamic library is located to ~/.bashrc or /etc/profile (effective permanently)
User level: append the library path to the end of the ~/.bashrc file
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/chiliast/homework/day03/shared/lib
source ~/.bashrc or . ~/.bashrc to make the configuration take effect
System level: append Library path to the end of the /etc/profile file
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/chiliast/homework/day03/shared/lib
source /etc/profile or ./etc/profile to make the configuration effective
Method 3: Add the absolute path of the directory where the dynamic library is located to / etc/ld.so.cache file (2-step implementation)
Edit the /etc/ld.so.conf file and add the path to the directory where the library file is located
Run ldconfig (requires super user permissions), this command will rebuild the /etc/ld.so.cache file
The above is the detailed content of What should I do if the Linux dynamic library cannot be found?. For more information, please follow other related articles on the PHP Chinese website!