linux静态库再次封装,Linux下使用JNI封装调用已经存在的动态静态库

备注:

本文在以下两片笔记的基础上扩充而来:

封装动态库:

#首先看下当前目录的文件

$ ls

functions.c functions.h HelloJni.class HelloJni.java JniSwapper.c JniSwapper.class JniSwapper.h JniSwapper.java

#先编译出一个动态库libfunc.so

$ gcc functions.c -fPIC -shared -o libfunc.so

#在libfunc.so的基础上编译libJniSwapper.so,注意这里需要用-l来表明依赖

$ gcc JniSwapper.c -fPIC -shared -I/usr/lib/jvm/java-7-openjdk-amd64/include -L. -lfunc -o libJniSwapper.so

$ export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

$ ldd libfunc.so

linux-vdso.so.1 => (0x00007ffd4070f000)

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f001c307000)

/lib64/ld-linux-x86-64.so.2 (0x00007f001c8ee000)

$ ldd libJniSwapper.so

linux-vdso.so.1 => (0x00007ffe161b2000)

libfunc.so => ./libfunc.so (0x00007f128ad82000)

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f128a99f000)

/lib64/ld-linux-x86-64.so.2 (0x00007f128b188000)

#执行

$ javac HelloJni.java

$ java HelloJni

100 + 200 = 300

封装静态库:

#编译生成.a

$ gcc -c functions.c

$ ar -rcs libfunc.a functions.o

$ ls

functions.c functions.h functions.o HelloJni.class HelloJni.java JniSwapper.c JniSwapper.class JniSwapper.h JniSwapper.java libfunc.a

#在libfunc.a的基础上编译libJniSwapper.so,注意这里需要用-l来表明依赖

$ gcc JniSwapper.c -fPIC -shared -I/usr/lib/jvm/java-7-openjdk-amd64/include -L. -lfunc -o libJniSwapper.so

$ export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

$ ldd libJniSwapper.so

linux-vdso.so.1 => (0x00007ffeceb62000)

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f54cae40000)

/lib64/ld-linux-x86-64.so.2 (0x00007f54cb427000)

#执行

$ javac HelloJni.java

$ java HelloJni

100 + 200 = 300

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值