linux下静态库和动态库的创建和使用
2014-01-17 10:01
399 查看
Linux通常把库文件存放在/usr/lib或/lib目录下。
Linux库文件名由:前缀lib、库名和后缀3部分组成,其中动态链接库以.so最为后缀,静态链接库通常以.a作为后缀。
下面通过一个例子来说明:mytestlib.h种存放的是静态库(或者动态库)提供给用户使用的函数的声明,mytestlib.c实现了mytestlib.h种声明的函数。
头文件:mytestlib.h
#ifndef _MYTESTLIB_H_
#define _MYTESTLIB_H_
int Add(int a,int b);
int Sub(int a,int b);
#endif
源文件:mytestlib.c
#include "mytestlib.h"
int Add(int a ,int b)
{
return a+b;
}
int Sub(int a,int b)
{
return a-b;
}
1.静态库的创建和使用
a.编译mytestlib.c生成目标文件:gcc -o mytestlib.o -c mytestlib.c
b.将目标文件加入到静态库中:ar rcs libmytestlib.a mytestlib.o
c.将静态库copy到Linux的库目录(/usr/lib或者/lib)下:cp libmytestlib.a /usr/lib/libtestmylib.a
d.编写一个调用库函数的测试程序mytest.c:
#include "mytestlib.h"
int main()
{
int a=5;
int b=3;
printf("hello ,welcome to mytest!\n");
printf("%d+%d=%d\n",a,b,Add(a,b));
printf("%d-%d=%d\n",a,b,Sub(a,b));
return 0;
}
e.使用静态库编译:gcc -o mytest mytest.c -lmytestlib
f.运行可执行程序mytest: ./mytest
hello ,welcome to mytest!
5+3=8
5-3=2
2.创建生成动态库
a.编译生成动态库
gcc mytestlib.c –fPIC –shared –o libmytestlib.so
由以上命令生成动态库libmytestlib.so
–fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,
而不能达到真正代码段共享的目的。
–shared:指明编译成动态库。
b.使用动态库编译命令:
gcc mytest.c –L . –l mytestlib –o mytest
–L:指明动态库所在的目录
-l:指明动态库的名称,该名称是处在头lib和后缀.so中的名称,如上动态库libtest.so的l参数为-l test。
c. 查看程序使用动态库情况:
ldd mytest
注: ldd 测试可执行文件所使用的动态库
d.将动态库copy到Linux的库目录(/usr/lib或者/lib)下:cp libmytestlib.so /usr/lib/libtestmylib.so
e.运行可执行程序mytest: ./mytest
hello ,welcome to mytest!
5+3=8
5-3=2
Linux库文件名由:前缀lib、库名和后缀3部分组成,其中动态链接库以.so最为后缀,静态链接库通常以.a作为后缀。
下面通过一个例子来说明:mytestlib.h种存放的是静态库(或者动态库)提供给用户使用的函数的声明,mytestlib.c实现了mytestlib.h种声明的函数。
头文件:mytestlib.h
#ifndef _MYTESTLIB_H_
#define _MYTESTLIB_H_
int Add(int a,int b);
int Sub(int a,int b);
#endif
源文件:mytestlib.c
#include "mytestlib.h"
int Add(int a ,int b)
{
return a+b;
}
int Sub(int a,int b)
{
return a-b;
}
1.静态库的创建和使用
a.编译mytestlib.c生成目标文件:gcc -o mytestlib.o -c mytestlib.c
b.将目标文件加入到静态库中:ar rcs libmytestlib.a mytestlib.o
c.将静态库copy到Linux的库目录(/usr/lib或者/lib)下:cp libmytestlib.a /usr/lib/libtestmylib.a
d.编写一个调用库函数的测试程序mytest.c:
#include "mytestlib.h"
int main()
{
int a=5;
int b=3;
printf("hello ,welcome to mytest!\n");
printf("%d+%d=%d\n",a,b,Add(a,b));
printf("%d-%d=%d\n",a,b,Sub(a,b));
return 0;
}
e.使用静态库编译:gcc -o mytest mytest.c -lmytestlib
f.运行可执行程序mytest: ./mytest
hello ,welcome to mytest!
5+3=8
5-3=2
2.创建生成动态库
a.编译生成动态库
gcc mytestlib.c –fPIC –shared –o libmytestlib.so
由以上命令生成动态库libmytestlib.so
–fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,
而不能达到真正代码段共享的目的。
–shared:指明编译成动态库。
b.使用动态库编译命令:
gcc mytest.c –L . –l mytestlib –o mytest
–L:指明动态库所在的目录
-l:指明动态库的名称,该名称是处在头lib和后缀.so中的名称,如上动态库libtest.so的l参数为-l test。
c. 查看程序使用动态库情况:
ldd mytest
注: ldd 测试可执行文件所使用的动态库
d.将动态库copy到Linux的库目录(/usr/lib或者/lib)下:cp libmytestlib.so /usr/lib/libtestmylib.so
e.运行可执行程序mytest: ./mytest
hello ,welcome to mytest!
5+3=8
5-3=2
相关文章推荐
- Linux下静态库和动态库的创建和使用
- VisualGDB:使用VS创建Linux静态库和动态库
- 【C/C++开发】C++静态库与动态库以及在Linux和Windows上的创建使用
- linux下静态库、动态库的创建与使用
- Linux下静态库、动态库的创建和使用
- Linux下静态库、动态库的创建和使用
- linux中静态库和动态库的创建和使用
- linux 动态库 静态库 创建和使用
- 问题集合 ---- linux 静态库和动态库创建、检查、使用建议
- linux下静态库和动态库的创建和使用
- 我使用过的Linux命令之ar - 创建静态库.a文件/关于Linux静态库和动态库的分析
- VisualGDB系列7:使用VS创建Linux静态库和动态库
- Linux下静态库和动态库的创建和使用
- linux 下静态库和动态库的创建,编译,和使用
- Linux静态库和动态库的创建与使用
- Linux中静态库和动态库的创建和使用
- linux 静态库(.a)、动态库(.so)的创建生成和使用方法
- linux---静态库与动态库的创建、生成、使用
- Linux下静态库,动态库的创建和使用,多个动态库使用
- Linux下静态库和动态库的创建和使用( 转载 )