linux 下创建静态库和动态库
来源:互联网 发布:hgame推荐 知乎 编辑:程序博客网 时间:2024/05/22 09:02
4.生成库文件
概述
编写函数代码
编译生成各目标文件
用ar文件对目标文件归档,生成静态库文件。注意归档文件名必须以lib打头(可查看库文件命名规则)。
使用要点:
在gcc的-I参数后加上静态库头文件的路径。
在gcc的-L参数后加上库文件所在目录
在gcc的-l参数后加上库文件名,但是要去掉lib和.a扩展名。
比如库文件名是libtest.a那么参数就是-ltest
编写最简单的源文件
编写如下两个文件,注意放在同一目录中
myalib.h //静态库头文件
myalib.c //静态库实现文件
//myalib.hvoidtest();//myalib.c#inlcude<stdio.h>voidtest(){printf("test\n");}
制作静态库文件
生成目标文件
gcc-c myalib.c
执行完后会生成一个myalib.o文件
用ar命令归档,格式为ar-rc <生成的档案文件名><.o文件名列表>
再次提醒,归档文件名一定要以lib打头,.a结尾。
ar-rc libtest.a myalib.o
执行完后会生成一个libtest.a文件
使用静态库文件
编写一个测试程序main.c,内容为
//main.c#include"myalib.h"intmain(int argc,char* argv[]){test();return0;}
编译目标文件,注意要把静态库头文件的路径加到-I参数里面
gcc-I ./ -o main.o -c main.c
现在生成了一个main.o文件
生成可执行文件,注意要把静态库文件的路径加到-L参数里面,
把库文件名(去掉打头的lib和结尾的.a)加到-l参数后面。如下面所示
gcc-o main -L ./ main.o -ltest
此时就会生成一个名为main的可执行文件
另外,注意-l参数好象应该加到输入文件名的后面,否则会报错。
比如gcc-o main -L./ -ltest main.o就会提示
main.o(.text+0x11):In function `main':
:undefined reference to `test'
collect2:ld returned 1 exit status
执行可执行文件查看效果
执行./main,输出
test
说明执行成功。
生成动态库文件
gcc-fPIC --shared test.c -o libtest.so
生成libtest.so
使用动态库文件
编译可执行文件
gccmain.c -o main -I./ -L./ -ltest
指定加载库的路径,后面会详细介绍。
exportLD_LIBRARY_PATH=./:$LD_LIBRARY_PATH
执行./main,输出
test
说明执行成功。
5.库文件命名
GNU库的使用必须遵守LibraryGNU PublicLicense(LGPL许可协议)。该协议与GNU许可协议略有不同,开发人员可以免费使用GNU库进行软件开发,但必须保证向用户提供所用的库函数的源代码。
系统中可用的库都存放在/usr/lib和/lib目录中。库文件名由前缀lib和库名以及后缀组成。根据库的类型不同,后缀名也不一样。共享库的后缀名由.so和版本号组成,静态库的后缀名为.a。
静态库的名字一般为libxxxx.a,其中xxxx是该lib的名称
动态库的名字一般为libxxxx.so.major.minor,xxxx是该lib的名称,major是主版本号,minor是副版本号
- [转载] linux下创建和使用静态和动态库
- Linux下创建和使用静态和动态库
- Linux环境下创建静态库和动态库
- linux 下创建静态库和动态库
- linux下静态库和动态库的创建
- linux下静态库和动态库的创建
- Linux下静态库、动态库的创建和使用
- Linux下静态库、动态库的创建和使用
- linux下动态/静态库的创建和使用
- Linux下的动态和静态库的创建
- Linux下创建静态、动态库
- Linux下创建静态、动态库
- Linux下创建静态、动态库
- Linux下创建静态、动态库
- Linux下创建静态、动态库
- Linux下创建静态、动态库
- Linux创建静态库和动态库
- Linux创建静态库和动态库
- 回调函数的抽象理论
- 计算机领域
- jdk自带的native2ascii.exe的使用方法
- 计算机视觉要用到的书籍(英语)
- 布局整理(七)
- linux 下创建静态库和动态库
- 常用数据结构之链式存储二叉树
- 发帖测试
- java中判断字符串是否为数字的方法
- C++ 中int,char,string,CString类型转换
- ResultSet
- ECShop网店系统 V2.7.3 beta3版发布
- 静态内部类
- Android wifi 信号强度单位 dbm