【Linux】用gcc生成静态库和动态库
2017-02-17 19:02
211 查看
linux下的库有两种:静态库和共享库(动态库)。
二者的不同点在于代码被载入的时刻不同。
静态库在程序编译时会被连接到目标代码中,目标程序运行时将不再需要该动态库,移植方便,体积较大,但是浪费空间和资源,因为所有相关的对象文件与牵涉到的库被链接合成一个可执行文件。
动态库在程序编译时并不会被连接到目标代码中,而是在程序运行时才被载入,因此体积较小,可以实现进程间的资源共享,甚至可以真正做到链接载入完全由程序员在程序代码中控制,另外将一些程序的升级变得简单,但是在程序运行时需要动态库存在.
在Linux中静态库均以.a为文件名后缀,动态库均以.so为文件名后缀
首先先写三个代码,hello.h
hello.c
我们用gcc -o 来编译test.c发现不能成功,因为test.c不能把hello.c里内容也一同编译
下面我们将hello.c用gcc -c 生成一个编译文件
ls
生成了一个hello.o文件
下面我们用指令将hello.o生成一个静态库libmyhello.a文件,与库文件中文件命名要统一
指令 ar -r libmyhello.a hello.o
ls后发现系统中多了一个libmyhello.a文件
执行
gcc -o test test.c libmyhello.a
生成test,执行./test
hello sgc
使用 ar -t libmyhello.a查看静态库libmyhello.a中包含的文件
hello.o
gcc生成动态库
执行两条命令
gcc -shared -fPIC -c hello.c
gcc -shared -fPIC -o libmyhello.so hello.o
即可生成一个动态库libmyhello.so
执行命令
gcc -o hello main.c -L. -lmyhello
生成hello文件
./hello后
hello sgc
二者的不同点在于代码被载入的时刻不同。
静态库在程序编译时会被连接到目标代码中,目标程序运行时将不再需要该动态库,移植方便,体积较大,但是浪费空间和资源,因为所有相关的对象文件与牵涉到的库被链接合成一个可执行文件。
动态库在程序编译时并不会被连接到目标代码中,而是在程序运行时才被载入,因此体积较小,可以实现进程间的资源共享,甚至可以真正做到链接载入完全由程序员在程序代码中控制,另外将一些程序的升级变得简单,但是在程序运行时需要动态库存在.
在Linux中静态库均以.a为文件名后缀,动态库均以.so为文件名后缀
首先先写三个代码,hello.h
#ifndef _HELLO_H #define _HELLO_H void hello(const char* str); #endif
hello.c
#include<stdio.h> void hello(const char * str) { printf("hello %s\n",str); }test.c
#include"hello.h" int main() { hello("sgc"); return 0; }gcc生成静态库
我们用gcc -o 来编译test.c发现不能成功,因为test.c不能把hello.c里内容也一同编译
下面我们将hello.c用gcc -c 生成一个编译文件
ls
生成了一个hello.o文件
下面我们用指令将hello.o生成一个静态库libmyhello.a文件,与库文件中文件命名要统一
指令 ar -r libmyhello.a hello.o
ls后发现系统中多了一个libmyhello.a文件
执行
gcc -o test test.c libmyhello.a
生成test,执行./test
hello sgc
使用 ar -t libmyhello.a查看静态库libmyhello.a中包含的文件
hello.o
gcc生成动态库
执行两条命令
gcc -shared -fPIC -c hello.c
gcc -shared -fPIC -o libmyhello.so hello.o
即可生成一个动态库libmyhello.so
执行命令
gcc -o hello main.c -L. -lmyhello
生成hello文件
./hello后
hello sgc
相关文章推荐
- Linux下Gcc生成和使用静态库和动态库详解(转)
- Linux下GCC生成和使用静态库和动态库详解
- Linux下用gcc生成静态库和动态库
- linux下用gcc生成静态库和动态库
- 在Linux下如何使用GCC编译程序、简单生成静态库及动态库
- Linux下Gcc生成和使用静态库和动态库详解(转)
- Linux下GCC生成和使用静态库和动态库详解(一)
- Linux下gcc生成和使用静态库和动态库详解
- 在Linux下如何使用GCC编译程序、简单生成静态库及动态库
- Linux 下 Gcc 生成和使用静态库和动态库详解
- 在Linux下如何使用GCC编译程序、简单生成静态库及动态库
- Linux下用gcc生成静态库和动态库
- Linux下GCC生成和使用静态库和动态库详解(一)
- Linux下Gcc生成和使用静态库和动态库详解(转)
- Linux 如何使用gcc生成静态库和动态库
- linux下用gcc生成静态库和动态库
- Linux下Gcc生成和使用静态库和动态库详解(转)
- Linux下Gcc生成和使用静态库和动态库详解(转)
- Linux下用gcc生成静态库和动态库
- Linux下GCC生成和使用静态库和动态库详解(一)