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
发表评论