ubuntu下在java代码中调用c代码

我的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,代码如下:

View Code
 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,代码如下:

View Code
#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下,使用如下命令:

View Code
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,即可输出想要的结果!

如有讲的不正确的地方,敬请指出,谢谢!






原文地址:https://www.cnblogs.com/zhangjl/p/2390234.html