首页 > 后端开发 > 正文

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程序

使用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如何调用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
如何用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
sh脚本如何自动执行java程序,并且该脚本如何被定期调用?
sh脚本如何自动执行java程序,并且该脚本如何被定期调用?

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

2024-03-25 17:04:12
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 vo

2024-03-24 13:37:34
如何把.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
如何使用命令行编译以及运行java文件
如何使用命令行编译以及运行java文件

如何使用命令行编译以及运行java文件方法/步骤我们先新建文本文档,输入自己的java程序。这里我写一个简单的java程序,来做示范。importjava.util.*;publicclassHelloDate{publicstaticvoidmain(String[]args){System.out.println("Hello,it's:");System.

2024-03-15 03:57:49
如何运行jar文件
如何运行jar文件

如何运行jar文件1、下载并安装最新版的Java虚拟机。下载网址:java.com/zh_CN/。2、安装好Java虚拟机后,双击需要运行的jar文件或在jar文件上点击鼠标右键,在弹出的菜单中选择“打开方式”→“选择默认程序”。3、在“打开方式”设置窗口中点击选中选项“始终使用选择的程序打开这种文件”前的复选框,再点击旁边的“浏览”按钮。4、选择JAVA虚拟机的安装文件夹,

2024-03-29 22:08:52
如何设置idea,只执行当前jav+a文件,忽略其他java文件的编译错+误?
如何设置idea,只执行当前jav+a文件,忽略其他java文件的编译错+误?

idea编写java程序idea如何编写java程序,让我们一起了解一下:首先我们要了解idea是什么,它是java编程语言开发的集成环境,在业界被公认为最好的java开发工具。用idea编写java程序是非常方便的,只需三步即可完成,是工程师的首选。一、创建Java项目1、打开IDEA 软件,点击界面上的 CreateNewProject。2、出现以下界面,选中Ja

2024-04-17 12:42:46