java中调用c_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安装目录如下:

19825bf2a7de7fb9c5062e331a0c0374.png

2)在安装并且配置好jdk环境变量后,开始编写java代码,取名为HelloWorld.java,代码如下:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.pngView 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文件目录如下图所示,目录的位置随便,只要在命令行中与其一致就行:

25b3e52db386ad0370ef330c28fe0f4f.png

用javac命令,生成class文件,首先定位到文件所在目录下,如图

b5b3c094a3f2c6548dcab86996512e7c.png

执行命令:javac HelloWorld.java,可以看到该目录下多了HelloWorld.class文件,如图所示:

dc15bea1ea04d231ead13877b59ad65f.png

如果在执行javac HelloWorld.java命令时没有生成class文件,需要先做如下操作,为了方便,将javah也做了替换,

1:sudo update-alternatives --install /usr/bin/java java /usr/lib/java/jdk1.6.0_24/bin/java300

2:sudo update-alternatives --install /usr/bin/javac javac /usr/lib/java/jdk1.6.0_24/bin/javac300

3:sudo update-alternatives --install /usr/bin/javah javah /usr/lib/java/jdk1.6.0_24/bin/javah300

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

7d13e24528c13a0719b0de7e0adcbb8a.png

4)编写c文件,文件名为HelloWorld.c,代码如下:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.pngView Code

#include

#include

#include "HelloWorld.h"

JNIEXPORT void JNICALL

Java_HelloWorld_print(JNIEnv *env, jobject obj)

{

printf("Hello World!\n");

return;

}

5)编译HelloWorld.c并生成动态链接库libHelloWorld.so,在linux下,使用如下命令:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.pngView 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,打开后如下:

0ea7bd8fdbcc5dca170b30e6f0af8b79.png

注意:PATH中的/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games必须保留,否则会导致系统登录不了。

按字母键 i,进入修改模式,在CLASSPATH后添加   :.,将当前目录添加到运行环境中去,编辑完成后,按 Esc键,再按输入:wq,保存退出,

输入以下命令,使其生效:source /etc/environment

再次执行java HelloWorld,报如下错误,

2652e3f981460dae7decfd88e4643287.png

原因是找不到so文件,可以参考第五步骤的博文,使用命令:

LD_LIBRARY_PATH=.

export LD_LIBRARY_PATH,

再次执行java HelloWorld,即可输出想要的结果!

6d0bcf385f911055ff77e925599b899f.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值