好记性不如铅笔头

C && C++, java, 编程

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

CONTENTS

备注:

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

【 http://116.62.110.235/blog/linux-dynamic-library-static-library/

【 http://116.62.110.235/blog/linux-jni-simple-example/

封装动态库:

#首先看下当前目录的文件
$ 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

发表评论

16 + 12 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据