首页 > 后端开发 > 正文

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

2024-04-17 21:24:30 | 我爱编程网

最近经常有小伙伴私信询问java如何调用c语言源文件并进行执行?相关的问题,今天,我爱编程网小编整理了以下内容,希望可以对大家有所帮助。

本文目录一览:

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

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

要在java中调用c语言的库,需要使用Java提供了JNI。\x0d\x0a举例说明\x0d\x0a在c语言中定义一个 void sayHello()函数(打印Hello World);然后在Java中调用这个函数显示Hello Word.\x0d\x0a现在分别从Java和C语言两部分说明:\x0d\x0a1. Java 部分\x0d\x0a首先定义一个HelloNative,在其中申明sayHello函数,函数要申明为Native 类型的.如下:\x0d\x0apublic class HelloNative {\x0d\x0apublic native void sayHello();\x0d\x0a}\x0d\x0a\x0d\x0a编译这个类,生成class文件:\x0d\x0ajavac HelloWorld.java\x0d\x0a\x0d\x0a利用javah生成需要的h文件\x0d\x0ajavah HelloNative\x0d\x0a\x0d\x0a生成的 h文件大概如下:\x0d\x0a\x0d\x0a/* DO NOT EDIT THIS FILE - it is machine generated */\x0d\x0a#include

\x0d\x0a/* Header for class HelloNative */\x0d\x0a\x0d\x0a#ifndef _Included_HelloNative\x0d\x0a#define _Included_HelloNative\x0d\x0a#ifdef __cplusplus\x0d\x0aextern "C" {\x0d\x0a#endif\x0d\x0a/*\x0d\x0a* Class: HelloNative\x0d\x0a* Method: sayHello\x0d\x0a* Signature: ()V\x0d\x0a*/\x0d\x0aJNIEXPORT void JNICALL Java_HelloNative_sayHello\x0d\x0a(JNIEnv *, jobject);\x0d\x0a\x0d\x0a#ifdef __cplusplus\x0d\x0a}\x0d\x0a#endif\x0d\x0a#endif\x0d\x0a\x0d\x0a可以看一下上面自动生成的程序,程序include了jni.h,这个头文件在 $JAVA_HOME下的include文件夹下. 还可以发现生成的函数名是在之前的函数名前面加上了Java_HelloNative。\x0d\x0a2. C语言部分\x0d\x0a根据上面生成的h文件编写相应的代码实现,建立一个 HelloNative.cpp用来实现显示Hello World的函数.如下:\x0d\x0a\x0d\x0a#include

\x0d\x0a#include "HelloNative.h"\x0d\x0a\x0d\x0aJNIEXPORT void JNICALL Java_HelloNative_sayHello(JNIEnv *, jobject)\x0d\x0a{\x0d\x0aprintf("Hello World!\n");\x0d\x0a}\x0d\x0a\x0d\x0a代码编写完成之后,我们再用gcc编译成库文件,命令如下;\x0d\x0agcc -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\x0d\x0a\x0d\x0a这样就会在当前目录下生成一个libHelloNative.so的库文件.这时需要的库已经生成,在C语言下的工作已经完成了.\x0d\x0a接下来需要在Java中编写一个程序测试一下.在程序前,需要将我们的库载入进去.载入的方法是调用Java的 System.loadLibrary("HelloNative");\x0d\x0a\x0d\x0apublic class TestNative\x0d\x0a{\x0d\x0astatic {\x0d\x0atry {\x0d\x0aSystem.loadLibrary("HelloNative");\x0d\x0a}\x0d\x0acatch(UnsatisfiedLinkError e) {\x0d\x0aSystem.out.println( "Cannot load hello library:\n " + e.toString() );\x0d\x0a}\x0d\x0a}\x0d\x0apublic static void main(String[] args) {\x0d\x0aHelloNative test = new HelloNative();\x0d\x0atest.sayHello();\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0a但是再编译后,运行的时候,问题又出现了.\x0d\x0aCannot load hello library:\x0d\x0ajava.lang.UnsatisfiedLinkError: no HelloNative in java.library.path\x0d\x0aException in thread "main" java.lang.UnsatisfiedLinkError: HelloNative.sayHello()V\x0d\x0aat HelloNative.sayHello(Native Method)\x0d\x0aat TestNative.main(TestNative.java:13)\x0d\x0a\x0d\x0a载入库失败,但是库明明就是放在当前文件夹下的,怎么会载入失败呢?\x0d\x0a用System.getProperty("java.library.path")查看,发现java.library.path中并不u存在当前的目录.主要有以下的几个解决办法:\x0d\x0a1) 将生成的库复制到java.library.path有的路径中去,当然这样不是很好\x0d\x0a2) 设置环境变量export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ,将当前的目录加入到LD_LIBRARY_PATH中\x0d\x0a3) 设置java 的选项,将当前的目录加入到其中 .java -Djava.library.path=. $LD_LIBRARY_PATH\x0d\x0a这样之后程序就能够成功的运行了.可以看见显示的"Hello World!"了

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

java中运行c语言的exe文件

在java按钮的触发事件 方法中写上:Runtime.getRuntime().exec("D:\\Program Files\\vmware.exe");

就可以运行路径为D:\\Program Files\\vmware.exe的外部程序了

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

java如何调用c程序

我爱编程网(https://www.52biancheng.com)小编还为大家带来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后缀的库文件。

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

以上就是我爱编程网小编整理的内容,想要了解更多相关资讯内容敬请关注我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“java如何调用c语言源文件并进行执行?”相关推荐
如何将java源程序打包成可执行文件
如何将java源程序打包成可执行文件

如何将java源程序打包成可执行文件把java项目打包成exe可执行文件!打包跨平台的.exe文件。安装后运行左窗窗口标有十步。第1步:完全略过,直接点Next第2步:选择“JARinEXEmode”就是选择已经有制作好的jar文件。第3步:上面是项目名称,可随便填写,下面一个写出想要将打包后的exe文件输出的目录的是“桌面\project\”。

2024-05-28 18:14:14
Java或Cmd如何等待进程出现再执行命令并且循环执行
Java或Cmd如何等待进程出现再执行命令并且循环执行

Java或Cmd如何等待进程出现再执行命令并且循环执行这种情况,一般采用阻塞式方法来实现的。java中有很多方法都属于阻塞式方法,比如InputStream中的read()、readLine()方法和线程中sleep()方法以及DatagramSocket的receive 等。这里可调用线程的特有方法sleep和start()来实现static void    sleep

2024-05-31 04:57:50
易语言 如何停止执行中的子程序事件
易语言 如何停止执行中的子程序事件

一些易语言代码转换成php代码.版本2aa=“www.a.a/h”sl=到数.版本2aa=“www.a.a/h”sl=到数值(到文本(HTTP读文件(aa+“kh/”+$_GET[key]+“.htm”)))gs=到数值($_GET[gs]).如果(gs<=sl)输出HTML文件(到文本(aa+“/”+到文本(gs)+“.htm”)).否则信息框(“错误

2025-01-28 05:46:09
PHP文件执行时显示源代码 php点击按钮调用一个函数
PHP文件执行时显示源代码 php点击按钮调用一个函数

有个PHP的动态加解密函数代码,求大神帮忙写一个对接这个PHP动态加解密的加解密的源码谢谢、<?php/** * 加密函数 * @param  string  $string    明文 或 密文   * @param  string  $operation DECODE表示解密,其它表示加密   * @param  string  $key       密匙   * @param  

2024-08-06 20:57:50
sh脚本如何自动执行java程序,并且该脚本如何被定期调用?
sh脚本如何自动执行java程序,并且该脚本如何被定期调用?

sh脚本如何自动执行java程序,并且该脚本如何被定期调用?各位好我有一个问题,是这样: 环境:有一套管理系统(包括联机和批量),该管理系统白天运行联机系统,晚上运行批量系统。 目的:联机系统运行到晚上,会停掉,这时候通过在unix下的sh脚本调用并且启动批量系统。 sh脚本可以调用java程序,通过java程序就可以启动了批量系统。 andilyliao写道最简单的方法你可以用java写一

2024-03-25 17:04:12
如何把.java程序变成.exe可执行文件
如何把.java程序变成.exe可执行文件

如何把.java程序变成.exe可执行文件有两种比较易用的方法:关于两种将Java程序转化为.exe程序工具的使用及比较一JSmooth1.出品Jsmooth,Sourceforge.NET2.类型free3.下载4.步骤a)利用Eclipse将所需要的主类打成可独立运行的jar包,注意添加manifest属性和MainClass。b)新建一个Jsmo

2024-04-06 08:57:26
如何用pdb进行python调试?
如何用pdb进行python调试?

如何用pdb进行python调试?本文章讲述了如何用pdb进行python调试讲解.当手边没有IDE,面对着python调试犯愁时,你就可以参考下本文;(pdb命令调试)和(pdb)help用pdb进行python调试,用法基本和gdb差不多,先看一个简单的例子:epdb1.py.#epdb1.py--experimentwiththePythondebugger,pdba=\"aaa\"

2024-01-10 14:08:44
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