Creating a shared and static library with the gnu compiler [gcc][转]
2011-05-06 16:05
429 查看
原文网址:http://www.adp-gmbh.ch/cpp/gcc/create_lib.html
还是看原文吧,不要看下面了,原文中有各种格式。
Here's a summary on how to create a shared and a static library with gcc. The goal is to show the basic steps. I do not want to go into the hairy details. It should be possible to use this page as a reference. These examples were tested and run on cygwin/Windows.
The header file
Of course, we need a header file.
calc_mean.h
Creating the static library
A static library is basically a set of object files that were copied into a single file. This single file is the static library. The static file is created with the archiver (ar).
First, calc_mean.c is turned into an object file:
Then, the archiver (ar) is invoked to produce a static library (named libmean.a) out of the object file calc_mean.o.
Note: the library must start with the three letters lib and have the suffix .a.
Creating the shared library
As with static libraries, an object file is created. The -fPICoption tells gcc to create position independant code which is necessary for shared libraries. Note also, that the object file created for the static library will be overwritten. That's not bad, however, because we have a static library that already contains the needed object file.
For some reason, gcc says:
It looks like -fPIC is not necessary on x86, but all manuals say, it's needed, so I use it too.
Now, the shared library is created
Note: the library must start with the three letter lib.
main.c
Linking against static library
Note: the first three letters (the lib) must not be specified, as well as the suffix (.a)
Linking against shared library
Note: the first three letters (the lib) must not be specified, as well as the suffix (.so)
Executing the dynamically linked programm
还是看原文吧,不要看下面了,原文中有各种格式。
Here's a summary on how to create a shared and a static library with gcc. The goal is to show the basic steps. I do not want to go into the hairy details. It should be possible to use this page as a reference. These examples were tested and run on cygwin/Windows.
The code for the library
This is the code that goes into the library. It exhibits one single function that takes two doubles and calculates their mean value and returns it. calc_mean.c//#include <stdio.h> double mean(double a, double b) { return (a+b) / 2; }
The header file
Of course, we need a header file.
calc_mean.h
double mean(double, double);
Creating the static library
A static library is basically a set of object files that were copied into a single file. This single file is the static library. The static file is created with the archiver (ar).
First, calc_mean.c is turned into an object file:
gcc -c calc_mean.c -o calc_mean.o
Then, the archiver (ar) is invoked to produce a static library (named libmean.a) out of the object file calc_mean.o.
ar rcs libmean.a calc_mean.o
Note: the library must start with the three letters lib and have the suffix .a.
Creating the shared library
As with static libraries, an object file is created. The -fPICoption tells gcc to create position independant code which is necessary for shared libraries. Note also, that the object file created for the static library will be overwritten. That's not bad, however, because we have a static library that already contains the needed object file.
gcc -c -fPIC calc_mean.c -o calc_mean.o
For some reason, gcc says:
cc1: warning: -fPIC ignored for target (all code is position independent)
It looks like -fPIC is not necessary on x86, but all manuals say, it's needed, so I use it too.
Now, the shared library is created
gcc -shared -Wl,-soname,libmean.so.1 -o libmean.so.1.0.1 calc_mean.o
Note: the library must start with the three letter lib.
The programm using the library
This is the program that uses the calc_mean library. Once, we will link it against the static library and once against the shared library.main.c
#include <stdio.h> #include "calc_mean.h" int main(int argc, char* argv[]) { double v1, v2, m; v1 = 5.2; v2 = 7.9; m = mean(v1, v2); printf("The mean of %3.2f and %3.2f is %3.2f\n", v1, v2, m); return 0; }
Linking against static library
gcc -static main.c -L. -lmean -o statically_linked
Note: the first three letters (the lib) must not be specified, as well as the suffix (.a)
Linking against shared library
gcc main.c -o dynamically_linked -L. -lmean
Note: the first three letters (the lib) must not be specified, as well as the suffix (.so)
Executing the dynamically linked programm
LD_LIBRARY_PATH=. ./dynamically_linked
Thanks
Thanks to Donn Morrison who helped me improve this page.相关文章推荐
- Creating a shared and static library with the gnu compiler [gcc]
- How do I build the Android SDK with hidden and internal APIs available?Creating a module library and
- 使用vs2010创建可重用代码(二)Creating and Using a Static Library (C++)
- fatal error C1047: The object or library file "..."was created with an older compiler than
- The C++ Standard Library: shared_ptr and unique_ptr
- Troubleshooting: Tuning the Shared Pool and Tuning Library Cache Latch Contention (文档 ID 62143.1)
- [18]Debian Linux Install GNU GCC Compiler and Development Environment
- Android Studio using a library and project with the same package name
- C.1 Configuring and compiling the GNU C Library
- #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. Th
- error: #error This file requires compiler and library support for the ISO C++ 2011 standard.
- GCC, the GNU Compiler Collection
- An Application Program Dynamically Loading and Linking the Shared Library
- 2 Getting Comfortable with Xcode 4 and the LLVM Compiler
- More Responsive Single-Page Applications With AngularJS & Socket.IO: Creating the Library
- Creating a Static Library with Xcode 4.6 or Higher
- C++中使用array报错 requires compiler and library surpport for the ISO c++ 2011 standard
- GCC - the GNU Compiler Collection - Tutorial
- error This file requires compiler and library support for the ISO C++ 2011 standard
- GCC the GNU Compiler Collection