JNI编程之Linux下静态库,动态库生成和使用

这篇博客详细讲解了Linux环境下JNI编程中静态库和动态库的生成及使用。首先,介绍了静态库的概念,包括其在编译链接过程中的作用,以及如何通过ar命令生成静态库。接着,讨论了动态库的基本概念,如动态链接库的组织方式和运行时加载。博客还通过实例展示了如何创建和使用静态库及动态库,包括编译目标文件、生成库文件、使用gcc命令链接库。最后,提到了动态库的搜索路径,包括默认路径、通过配置文件、环境变量以及编译时指定路径的方法,并阐述了这些路径的搜索顺序。
摘要由CSDN通过智能技术生成

 

Linux下静态库生成和使用

 

一.静态库概念

1.库是预编译的目标文件(object  files)的集合,它们可以被链接进程序。静态库以后缀为”.a”的特殊的存档(archive file)存储。

2.标准系统库可在目录/usr/lib与/lib中找到。比如,在类Unix系统中C语言的数序库一般存储为文件/usr/lib/libm.a。该库中函数的原型声明在头文件/usr/include/math.h中。

3.C标准库本身存储为/usr/lib/libc.a,它包含ANS1/ISO标准指定的函数,比如printf。对每一个C程序来说,libc.a都默认被链接。

 4.一个事例:

在程序中调用一个数序库libm.a中sin函数。

#include<stdio.h>

#include<math.h>

int  main()

{

         double  x = 2.0;

         double y = sin(x);

         printf(“the result:%f\n”,y);

         return 0;

}

 

如果直接使用gcc tiger.c则会出现错误:

undefined  reference to ‘sin’;

1>函数sin(),未在本程序中定义也不在默认库’libc.a’中,除非被指定,编译器也不会链接’libm.a’。

2>为使编译器能将sin()链接进主程序‘test.c’,需要提供数学库’libm.a’.。

3>使用方法:

gcc  tiger.c /usr/lib/libm.a  -o tiger

则可以编译通过。为了避免在命令行中指定长的路径,编译器为链接函数库提供了快捷的选项’-l’。因此可以使用下面的方法:

gcc  tiger.c -lm –o tiger

注:选项-lNAME使用连接器尝试链接系统库目录中的函数库文件libNAME.a。

二.生成和使用静态库

1.静态库是obj文件的一个集合,通常静态库以”.a”为后缀。静态库由程序ar生成。

2.静态库的优点是可以在不用重新编译程序库代码的情况下,进行程序的重新链接,这种方法节省了编译过程的时间(在编译大型程序的时候,需要花费很长的时间)。静态库的另一个优点是开发者可以提供库文件给使用的人员,不用开放源代码,这是库函数提供者经常采用的手段。

3.通过一个实例来了解如何自己生成静态库和使用静态库

首先生成静态库

1>在test文件夹下有三个文件:main.c ,tiger.c,tiger.h;

 

a. main.c文件中的内容:

#include<stdio.h>

#include”tiger.h”

 

int  main(void)

{

       printf(“sum=%d\n”,add(3,5));

       return 0;      

}

b.tiger.h文件中的内容:

 

#ifndef __TIGER__

#define __TIGER__

 

int  add(int  a,int b);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值