备注:
本文在以下两片笔记的基础上扩充而来:
封装动态库:
#首先看下当前目录的文件
$ 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