- Kali Linux Tutorial
- Kali Linux - Home
- Installation & Configuration
- Information Gathering Tools
- Vulnerability Analyses Tools
- Kali Linux - Wireless Attacks
- Website Penetration Testing
- Kali Linux - Exploitation Tools
- Kali Linux - Forensics Tools
- Kali Linux - Social Engineering
- Kali Linux - Stressing Tools
- Kali Linux - Sniffing & Spoofing
- Kali Linux - Password Cracking Tools
- Kali Linux - Maintaining Access
- Kali Linux - Reverse Engineering
- Kali Linux - Reporting Tools
- Kali Linux Useful Resources
- Kali Linux - Quick Guide
- Kali Linux - Useful Resources
- Kali Linux - Discussion
Understanding .a , .so and .la library files in Linux
In order to understand what the libraries of files with the extensions .a, .so and .la actually mean, we first must be aware of the concept of libraries in Linux. A Linux in its very simple terms is a collection of pre-compiled pieces of code which are known as functions. Libraries are very useful as they provide reusable functions, classes and data structures. Some examples of libraries in Linux are glibc (GNU version of standard C library), libc (the C standard library).
In total we can divide the libraries in Linux in two categories. These categories are −
The libraries that are locked into a program at compile time are known as static libraries. They are also known as statically-linked libraries and if made up of a set of routines, external functions and variables. After locking into a program at compile time, it is then copied to a target application by a linker, binder or compiler, which in turn produces an object file and a stand-alone executable.
These types of libraries are faster than the shared libraries as a set of object files that are commonly used is put into a single library executable file.
The downside of using a static library is that the code that is used to build it, is locked into the final executable and it cannot be modified without re-compiling the library.
The static libraries have a .a extension, where the .a stands for “archive” and below output shows some of the static libraries inside the go source code.
immukul@192 darwin_amd64 % ls -tlr total 49376 -rw-r--r-- 1 root wheel 356788 Apr 1 23:13 unicode.a -rw-r--r-- 1 root wheel 1023672 Apr 1 23:13 time.a -rw-r--r-- 1 root wheel 1534494 Apr 1 23:13 syscall.a -rw-r--r-- 1 root wheel 288140 Apr 1 23:13 sync.a -rw-r--r-- 1 root wheel 501654 Apr 1 23:13 strings.a -rw-r--r-- 1 root wheel 537834 Apr 1 23:13 strconv.a -rw-r--r-- 1 root wheel 227774 Apr 1 23:13 sort.a
Libraries that exist as separate files outside of the executable files are known as dynamic libraries. At compile time the program makes one copy of the library’s files.
The benefit of using a dynamic library is that one single library can be used by multiple applications without the need for each application to have its own copy of the library like we have in case of the static libraries.
The downside of a dynamic library is that the chances of breaking is much higher as compared to a static library. A simple case would be that if a dynamic library becomes corrupt, the executable file may no longer be working.
The files with the .so extension are nothing but dynamic libraries and the suffix “.so” stands for shared object.
Consider the output shown below that denotes some of the dynamic libraries present inside the /usr/lib folder on my Ubuntu machine.
lrwxr-xr-x 1 root wheel 27 Jan 1 2020 libhunspell-1.2.0.so -rwxr-xr-x 1 root wheel 177440 Jan 1 2020 libgmalloc.so -rwxr-xr-x 1 root wheel 104112 Jan 1 2020 libffi-trampolines.so -rwxr-xr-x 1 root wheel 2851232 Jan 1 2020 libMTLCapture.so -rwxr-xr-x 1 root wheel 137824 Jan 1 2020 libLeaksAtExit.so
The files with the .la extension are not libraries but in fact they are textual files that include a description of the library. They are generated by the GNU “libtools” package and are used to describe the files that make up the corresponding libraries.
- Related Articles
- Understanding stdin, stderr and stdout in Linux
- Difference Between .a and .so files
- Understanding Time Command in Linux
- Understanding Stale file handles in Linux
- Concatenating Files in Linux
- Delete empty files and directories in Linux
- Find and tar Files on Linux
- Linux Files Series
- Linking to Files in Linux
- C++ Standard Library Header Files
- Recursive Search and Replace in Text Files in Linux
- Decompressing Files in Linux with Gunzip
- How to move a file, group of files, and directories in Linux?
- How to Protect Files and Directories from Deleting in Linux
- Move All Files Including Hidden Files Into Parent Directory in Linux