首页 > 后端开发 > 正文

java如何调用c程序

2024-03-24 13:37:34 | 我爱编程网

我爱编程网小编给大家带来了java如何调用c程序相关文章,一起来看一下吧。

本文目录一览:

java如何调用c程序

java如何调用c程序

使用JNI.

一、首先需要编写一个native的java方法。

public class Test{

static{

System.loadLibrary("mydll");

}

public static void main(String[] args) {

new Test().test();

}

public  native void test();

}

二 使用javac 编译。使用javah生产头文件。

生产的头文件就在你执行这些命令目录下面。

三、编写C代码。include这个头文件.实现 头文件中的test函数。

四、把自己编写的.c的c语言程序编译成dll后缀的库文件。

五、在这个例子里面把库文件放在项目根目录下就可以了。

java如何调用c程序

java怎么引用c

Java调用C语言程序时,主要是涉及到操作系统底层的事件。这种时间Java无法处理,例如用户上传一个视频文件,需要后台给视频加上水印,或者后台分离视频流和音频流。只能通过调用C语言处理。

使用Java如何去调用C语言的接口呢?使用Java的JNI技术。

具体调用步骤如下:

1.首先创建Java文件 HelloJni.java ,并创建native方法。

2.编译Java文件并生成java头文件。

3.创建C语言文件,HelloWorld.c。

4.生成动态链接库文件 libhello.so。

5.设置动态链接库文件的目录。

6.把刚才生成的so文件拷贝到/home/lib下,然后执行class文件。

java如何调用c程序

java如何调用c语言源文件并执行?

我爱编程网(https://www.52biancheng.com)小编还为大家带来java如何调用c语言源文件并执行?的相关内容。

要在java中调用c语言的库,需要使用Java提供了JNI。

举例说明

在c语言中定义一个 void sayHello()函数(打印Hello World);然后在Java中调用这个函数显示Hello Word.

现在分别从Java和C语言两部分说明:

1. Java 部分

首先定义一个HelloNative,在其中申明sayHello函数,函数要申明为Native 类型的.如下:

public class HelloNative {

public native void sayHello();

}

编译这个类,生成class文件:

javac HelloWorld.java

利用javah生成需要的h文件

javah HelloNative

生成的 h文件大概如下:

/* DO NOT EDIT THIS FILE - it is machine generated */

#include

/* Header for class HelloNative */

#ifndef _Included_HelloNative

#define _Included_HelloNative

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class: HelloNative

* Method: sayHello

* Signature: ()V

*/

JNIEXPORT void JNICALL Java_HelloNative_sayHello

(JNIEnv *, jobject);

#ifdef __cplusplus

}

#endif

#endif

可以看一下上面自动生成的程序,程序include了jni.h,这个头文件在 $JAVA_HOME下的include文件夹下. 还可以发现生成的函数名是在之前的函数名前面加上了Java_HelloNative。

2. C语言部分

根据上面生成的h文件编写相应的代码实现,建立一个 HelloNative.cpp用来实现显示Hello World的函数.如下:

#include

#include "HelloNative.h"

JNIEXPORT void JNICALL Java_HelloNative_sayHello(JNIEnv *, jobject)

{

printf("Hello World!\n");

}

代码编写完成之后,我们再用gcc编译成库文件,命令如下;

gcc -fPIC -I/usr/lib/jvm/java-7-openjdk-i386/include -I/usr/lib/jvm/java-7-openjdk-i386/include/linux -shared -o libHelloNative.so HelloNative.cpp

这样就会在当前目录下生成一个libHelloNative.so的库文件.这时需要的库已经生成,在C语言下的工作已经完成了.

接下来需要在Java中编写一个程序测试一下.在程序前,需要将我们的库载入进去.载入的方法是调用Java的 System.loadLibrary("HelloNative");

public class TestNative

{

static {

try {

System.loadLibrary("HelloNative");我爱编程网

}

catch(UnsatisfiedLinkError e) {

System.out.println( "Cannot load hello library:\n " + e.toString() );

}

}

public static void main(String[] args) {

HelloNative test = new HelloNative();

test.sayHello();

}

}

但是再编译后,运行的时候,问题又出现了.

Cannot load hello library:

java.lang.UnsatisfiedLinkError: no HelloNative in java.library.path

Exception in thread "main" java.lang.UnsatisfiedLinkError: HelloNative.sayHello()V

at HelloNative.sayHello(Native Method)

at TestNative.main(TestNative.java:13)

载入库失败,但是库明明就是放在当前文件夹下的,怎么会载入失败呢?

用System.getProperty("java.library.path")查看,发现java.library.path中并不u存在当前的目录.主要有以下的几个解决办法:

1) 将生成的库复制到java.library.path有的路径中去,当然这样不是很好

2) 设置环境变量export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ,将当前的目录加入到LD_LIBRARY_PATH中

3) 设置java 的选项,将当前的目录加入到其中 .java -Djava.library.path=. $LD_LIBRARY_PATH

这样之后程序就能够成功的运行了.可以看见显示的"Hello World!"了

以上就是我爱编程网小编给大家带来的java如何调用c程序,希望能对大家有所帮助。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“java如何调用c程序”相关推荐
bat脚本如何调用JAVA程序
bat脚本如何调用JAVA程序

.bat调用java文件的命令第一步:先右击创建一个txt文件,重命名为”run.bat“文件。第二步:将此文件复制到java文件的存放路径下。第三步:右击,选择编辑,之后在里面输入:javac文件名称.java//第一行是为了编译java文件为class文件java文件名称//本句话是为了执行class文件进行运行备注:bat文件默认的就是执行黑窗口命令,直接双击运行即

2024-03-16 13:21:26
java如何调用c语言源文件并进行执行?
java如何调用c语言源文件并进行执行?

java如何调用c语言源文件并进行执行?要在java中调用c语言的库,需要使用Java提供了JNI。\x0d\x0a举例说明\x0d\x0a在c语言中定义一个voidsayHello()函数(打印HelloWorld);然后在Java中调用这个函数显示HelloWord.\x0d\x0a现在分别从Java和C语言两部分说明:\x0d\x0a1.Java部分\x0d\x0a首先定义一个Hell

2024-04-17 21:24:30
如何在Python中调用C++代码或Java包中的函数?
如何在Python中调用C++代码或Java包中的函数?

如何在Python中调用C++代码或Java包中的函数?可以用Python的扩展来实现。Python本来是C实现的,封装二进制兼容的C++是很容易的。Java的话得通过JNI来实现,就是说在Python扩展里用C调用Java。另外,也可以写一个TCP服务来包装C++/Java的接口,通过网络来调用,这样更通用。使用python脚本对java文件进行编译打包发布,这个脚本如何写

2024-06-15 00:37:25
java程序如何调试
java程序如何调试

java程序如何调试其实最好是在DOS环境下来进行调试的。这样的话。你会对JAVA的运行机制会有很深刻的了解的。当然你也可以使用象eclipse和myeclipse这样的软件的。这样的软件集成度会有点高的。但是就是说呢比较傻瓜化,不利于学习的。怎么搭建的java开发,测试,生产环境的Java编译运行过程程序员所编写的是以.java为后缀的文件,此文件操作系统不能正确识别,因此,

2024-04-11 18:45:53
java web如何去调用一个spark程序
java web如何去调用一个spark程序

javaweb如何去调用一个spark程序javaweb如何去调用一个spark程序public class HeadlinesFragment extends ListFragment { OnHeadlineSelectedListener mCallback; public interface OnHeadlineSelectedListener { void onArticle

2024-03-25 17:28:00
Python中怎么调用C代码?Python中调用C代码方法
Python中怎么调用C代码?Python中调用C代码方法

Python中怎么调用C代码?Python中调用C代码方法Python是一门较为简单的编程语言,如今很多小学都已经开始教授python了,可见它的热度之高。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。而如果你是零基础想要自学Python的话,那么就建议你进行专业系统的视频课程学习!为帮助广大Python学习爱好者提升,精选到了几套专业优质的Python自学视频课程,学

2023-12-16 10:22:52
java中如何调用用于运行java程序的cmd命令啊
java中如何调用用于运行java程序的cmd命令啊

编译和执行一个java程序使用的命令分别是???javacxxx.java(这是编译命令,在cmd中)javaxxx(不带java后缀,这是运行,一定先编译才行)另外这两个命令的使用必须是你编译运行的文件在当前打开的目录中比如你现在在cmd中打开到桌面文件夹那么你的java源代码一定得在桌面上java中如何调用用于运行java程序的cmd命令啊Runtim

2024-03-26 02:48:59
java如何调用exe文件?
java如何调用exe文件?

java如何调用exe文件?publicclasstransferExe{\x0d\x0apublicstaticvoidmain(String[]args){\x0d\x0aopenWinExe();\x0d\x0aopenExe();\x0d\x0a}\x0d\x0a//用Java调用windows系统的exe文件,比如notepad,calc之类\x0d\x0apublicstatic

2024-03-23 05:42:40