This article describes how to create and use static and dynamic libraries in linux. For more information, see
Creation and use of static and dynamic databases
1. Basic concepts
Static library: During the link, the library is packaged into an executable file together with the. o file generated by the compilation. In linux/windows, the extensions are. a/. lib.
Dynamic library: the dynamic library is not packaged into an executable file when the link is linked, and the dynamic library is dynamically loaded during execution. In linux/windows, the extensions are. so/. dll.
The main differences are as follows:
A. maintainability.
Merge updates. To update a dynamic library, replace the library. However, static integration requires a new link to generate a new executable program for full update.
Environment dependency. If the static library is included, it is not dependent on the environment after compilation. A dynamic library is dependent and must have a corresponding dynamic library in the environment.
B. size
Space utilization. If the database depends on the same static database, multiple copies exist.
The size of the executable file. The static library file is large.
C. a dynamic library can share resources between processes. it is also called a shared library.
2. create and use static databases
A static library is essentially a group of. o compressed files with the extension. a/. lib.
Copy codeThe code is as follows:
Ar-crv libXXX. a mmmm. o nnnn. o
XXX indicates the database name and mmmm. o nnnn. o indicates the target file to be packaged. Crv parameters, meaning:
C: do not warn if the library had to be created
R: replace existing or insert new file (s) into the archive
V: be verbose
During use, you only need to introduce the header file in the code. when linking, specify the search path (-L option) and static library name (without the lib prefix and. suffix a,-l option ).
Copy codeThe code is as follows:
G ++ test. cpp-L ../StaticLibrary-lXXX
3. dynamic library
The Window format is different from that of the Linux execution file. there are some differences when creating a dynamic library.
In Windows, the execution file is in PE format. the dynamic library requires a DllMain function to initialize the entry. the _ declspec (dllexport) keyword is usually required when exporting the function declaration.
In Linux, the gcc-compiled execution file is in ELF format by default, and does not require initialization entry or special declaration by functions. it is easier to compile.
The name format of the dynamic library in linux is the same as that of the static library in libXXX. so format.
You can create a dynamic library by using the compiler without using a dedicated packaging tool like a static library.
To create a dynamic library, add the-fPIC option during source code compilation and The-shared option when linking.
Copy codeThe code is as follows:
G ++-fPIC-shared-o libXXX. so xxx. cpp
Use the same static library,
Copy codeThe code is as follows:
G ++ test. cpp-L ../DynamicLibrary-lXXX
You only need to set the search path. Default search path:/lib/,/usr/lib.
Set the search path:
Edit/etc/ld. so. conf and set the search path.
Run ldconfig to recreate the/etc/ld. so. cache file. The setting takes effect.
4. related tools
Ldd view the shared library (dynamic library) on which the program depends)
Copy codeThe code is as follows:
Gcc/g ++ parameter-I (uppercase 'I'),-L (uppercase 'L'),-l (lowercase 'L ')
1.-I (uppercase 'I') header file directory
2.-L (uppercase 'L') Library Directory
3.-l (lower case 'L') database name
The upper case is the directory and the lower case is the database.