我的ubuntu版本为10.04,使用wubi安装的
1)在ubuntu下安装jdk1.6,安装方法有两种,一种是自动安装,安装完后自动配置好环境变量等,一种是手动安装,下载好jdk,安装好再自己去配置jdk的环境变量,,由于后续的一些操作和手动配置相关,所以本文采用jdk的手动安装。
jdk的自动安装,可以参考此博文,写的很详细:http://chirs1012f.iteye.com/blog/969038
jdk的手动安装,可以参考博文:http://chirs1012f.iteye.com/blog/981114
jdk安装好后,我的jdk安装目录如下:
2)在安装并且配置好jdk环境变量后,开始编写java代码,取名为HelloWorld.java,代码如下:
1 class HelloWorld {
2 //你要调用的c函数声明
3 private native void print();
4 public static void main(String[] args) {
5 new HelloWorld().print();
6 }
7 //加载动态链接库
8 static {
9 System.loadLibrary("HelloWorld");
10 }
11 }
我的java文件目录如下图所示,目录的位置随便,只要在命令行中与其一致就行:
用javac命令,生成class文件,首先定位到文件所在目录下,如图
执行命令:javac HelloWorld.java,可以看到该目录下多了HelloWorld.class文件,如图所示:
如果在执行javac HelloWorld.java命令时没有生成class文件,需要先做如下操作,为了方便,将javah也做了替换,
1:sudo update-alternatives --install /usr/bin/java java /usr/lib/java/jdk1.6.0_24/bin/java 300
2:sudo update-alternatives --install /usr/bin/javac javac /usr/lib/java/jdk1.6.0_24/bin/javac 300
3:sudo update-alternatives --install /usr/bin/javah javah /usr/lib/java/jdk1.6.0_24/bin/javah 300
4:sudo update-alternatives --config java
需要将前3条中的 /usr/lib/java/jdk1.6.0_24/bin/javac 替换为你自己的jdk安装目录,我的就替换为
/home/zhangjl/jdk1.6.0_24/bin/java
/home/zhangjl/jdk1.6.0_24/bin/javac
/home/zhangjl/jdk1.6.0_24/bin/javah
之后在执行javac HelloWorld.java,生成class文件。
3)生成头文件:执行 javah -jni HelloWorld,之后如图所示:
如不能生成头文件,可以试试sudo javah -jni HelloWorld
4)编写c文件,文件名为HelloWorld.c
,代码如下:
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
return;
}
5)编译HelloWorld.c
并生成动态链接库libHelloWorld.so,在linux下,使用如下命令:
gcc -fpic -shared HelloWorld.c -I /home/zhangjl/jdk1.6.0_24/include/ -I /home/zhangjl/jdk1.6.0_24/include/linux/ -o libHelloWorld.so
具体的参数含义可以参考博文:
http://wiki.ubuntu.org.cn/index.php?title=Gcchowto&variant=zh-cn
http://wiki.ubuntu.org.cn/index.php?title=Compiling_C&variant=zh-cn
6)最后,执行命令,打印出输出语句
java HelloWorld
如果提示找不到类的提示错误,需要配置一下java的运行环境,我修改的是/etc/environment文件,
用vim打开/etc/environment文件,命令为sudo vim /etc/environment,打开后如下:
注意:PATH中的/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games必须保留,否则会导致系统登录不了。
按字母键 i,进入修改模式,在CLASSPATH后添加 :.,将当前目录添加到运行环境中去,编辑完成后,按 Esc键,再按输入:wq,保存退出,
输入以下命令,使其生效:source /etc/environment
再次执行java HelloWorld,报如下错误,
原因是找不到so文件,可以参考第五步骤的博文,使用命令:
LD_LIBRARY_PATH=.
export LD_LIBRARY_PATH,
再次执行java HelloWorld,即可输出想要的结果!
如有讲的不正确的地方,敬请指出,谢谢!