How can I "register" my library
foo.c, compiled tolibfoo.so, to link it with-lfoo? Is it by appending its path toLD_LIBRARY_PATH? Is it by runningsudo ldconfig?For curiosity, who do I "register" it with? That is, which application "needs to know" what
-lfoomeans in order forgcc bar.c -lfooto work? Is it the bash environment? Is it gcc? Is it the kernel?Is any of this different for static libraries (eg.
libfoo.a)?
How can I "register" my library libfoo.so to link it with `-lfoo`?
3.8k views Asked by étale-cohomology At
1
There are 1 answers
Related Questions in C
- How to call a C language function from x86 assembly code?
- What does: "char *argv[]" mean?
- User input sanitization program, which takes a specific amount of arguments and passes the execution to a bash script
- How to crop a BMP image in half using C
- How can I get the difference in minutes between two dates and hours?
- Why will this code compile although it defines two variables with the same name?
- Compiling eBPF program in Docker fails due to missing '__u64' type
- Why can't I use the file pointer after the first read attempt fails?
- #include Header files in C with definition too
- OpenCV2 on CLion
- What is causing the store latency in this program?
- How to refer to the filepath of test data in test sourcecode?
- 9 Digit Addresses in Hexadecimal System in MacOS
- My server TCP doesn't receive messages from the client in C
- Printing the characters obtained from the array s using printf?
Related Questions in LINUX
- Is there some way to use printf to print a horizontal list of decrementing hex digits in NASM assembly on Linux
- Why does Hugo generate different taxonomy-related HTML on different OS's?
- Writes in io_uring do not advance the file offset
- Why `set -o pipefail` gives different output even though the pipe is not failing
- what really controls the permissions: UID or eUID?
- Compiling eBPF program in Docker fails due to missing '__u64' type
- Docker container unable to make HTTPS requests to external API
- Whow to use callback_query_handler in Python 3.10
- Create kea runtime directory at startup in Yocto image
- Problem on CPU scheduling algorithms in OS
- How to copy files into the singularity sandbox?
- Android kernel error: undefined reference to `get_hw_version_platform'
- Is there a need for BPF Linux namespace?
- Error when trying to execute a binary compiled in a Kali Linux machine on an Ubuntu system
- Issue with launching application after updating ElectronJs to version 28.0.0 on Windows and Linux
Related Questions in BASH
- When does Bash read heredocs?
- Why `set -o pipefail` gives different output even though the pipe is not failing
- Run an external command within jq to manipulate each values of a particular key
- API key 401 error in .env.development file
- How to "Enable mobile data" on a Huawei E3372 4G USB dongle using a bash script in Windows
- ImageMagick / Bash : pipe ignored(?) when filename format variable used
- MacOS Bash-Script: while read p and echo
- Parse command line arguments and write useful usage message without additional code
- JQ JSON - Values to Array
- why variable substitution is so different?
- postbank_pdf2csv: how to setup with Cygwin in Windows?
- Custom Bash functions & custom statements - Need some advice
- unexpected operator == in square brackets when trying to use gum lib
- How to disable a bash builtin inside a docker container
- Use sed or rename find series of alphabet then replace with with the same alphabet and a dash -
Related Questions in GCC
- File refuses to compile std::erase() even if using -std=g++23
- the difference between two style of inline ASM
- Why veneer code generated by gcc for cortex-m0 seems 8-byte aligned?
- How to compile the Linux kernel with -O0 for more detailed debug?
- GMP Windows installation "configure: error: could not find a working compiler"
- Unable to run get .exe file from assembly NASM
- Problem with compiling c++ project that is running python code using Python.h -> undefined reference
- How to use a newer linker and glibc in a Kotlin/Native project?
- "Config.guess failed to determine the host type" when trying build binutils-2.7 with Cygwin
- Trying to compile GCC returns a bunch of errors
- Compiling with gcc fno-common option causes performance degradation
- On cygwin I get errors containing -lintl and -liconv when running gcc
- Constant function pointer optimization
- How to obtain mingw-w64 version 9.3.0 or older for MSYS2?
- How to fix this error in terminal while writing hello world code in VS Code on C?
Related Questions in DYNAMIC-LINKING
- Making binary depend on the correct `libpthread`
- Unable to load library from custom paths during compilation
- Segmentation fault while loading library with LD_LIBRARY_PATH
- Is mixing dynamic and shared libraries a good idea when creating an ODBC Driver?
- Executable searching for the linked library in different path than the one set using LD_LIBRARY_PATH
- Where is the order in which ELF relocations are applied specified?
- Cmake: Specify custom path to STL library (libstdc++)
- Visual Studio 2022 - how to link an .obj file residing somewhere else on the system?
- Unable to dynamically link on Alpine
- Statically include libc in c++ program with gcc without using -static option
- How to set BOOST_ALL_DYN_LINK for Cython build of my library interface on Windows 10
- What exactly is static variable behaviour in multiple linkeage of a library that contains it in C++?
- Using patchelf to change the SONAME of libGLdispatch.so breaks its functionality
- What is the linux command that gives the paths to libraries for linking during c++ compilation?
- build static curl executable from source
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
If your library is not in a "standard" library directory such as (eg.
/usr/local/libor/usr/lib) then you'll need to tell the compiler it's location-Lwhen you link it-l:-Lis the location to search for libraries linked to your executable-llinks the library to the executable (-lfoocan be translated as "link library libfoo.so")When using shared libraries sometimes simply linking them is not enough (eg. if the library is not installed in a standard location such as the example shown above). This is where using
LD_LIBRARY_PATH,rpathorldconfigcomes into play. Static library paths won't need to be set like shared libraries since they are compiled with the executable.LD_LIBRARY_PATH
Exporting this variable informs the run-time linker to look in the specified location for the
libfoo.solibrary that's associated with the executable.LD_LIBRARY_PATHis more or less a temporary, or convenient way of setting a library's location.rpath
rpathworks similarly toLD_LIBRARY_PATH(as libraries can reside almost anywhere in userland), however,rpathis linked to the executable at compile time, and sets a "fixed" library location.ldconfig
Ultimately what might be the best solution is to use
ldconfig, which creates the necessary links and cache to the most recent shared libraries found in the standard library locations and ones you can specify. It does require elevated permissions (eg.sudo) to set paths up this way, and should be used with a certain degree of caution.This copies the library into
/usr/local/libwith permissions set to be readable by everyone.Then we update the loader cache, and verify the path is set correctly.
By using
ldconfig, the-Loption,LD_LIBRARY_PATHorrpathnow shouldn't be needed.Additional Information
↳ Shared Libraries With GCC on Linux