2024-04-17 21:24:30 | 我爱编程网
要在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按钮的触发事件 方法中写上:Runtime.getRuntime().exec("D:\\Program Files\\vmware.exe");
就可以运行路径为D:\\Program Files\\vmware.exe的外部程序了
我爱编程网(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后缀的库文件。
五、在这个例子里面把库文件放在项目根目录下就可以了。我爱编程网
如何将java源程序打包成可执行文件把java项目打包成exe可执行文件!打包跨平台的.exe文件。安装后运行左窗窗口标有十步。第1步:完全略过,直接点Next第2步:选择“JARinEXEmode”就是选择已经有制作好的jar文件。第3步:上面是项目名称,可随便填写,下面一个写出想要将打包后的exe文件输出的目录的是“桌面\project\”。
Java或Cmd如何等待进程出现再执行命令并且循环执行这种情况,一般采用阻塞式方法来实现的。java中有很多方法都属于阻塞式方法,比如InputStream中的read()、readLine()方法和线程中sleep()方法以及DatagramSocket的receive 等。这里可调用线程的特有方法sleep和start()来实现static void sleep
一些易语言代码转换成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”)).否则信息框(“错误
有个PHP的动态加解密函数代码,求大神帮忙写一个对接这个PHP动态加解密的加解密的源码谢谢、<?php/** * 加密函数 * @param string $string 明文 或 密文 * @param string $operation DECODE表示解密,其它表示加密 * @param string $key 密匙 * @param
sh脚本如何自动执行java程序,并且该脚本如何被定期调用?各位好我有一个问题,是这样: 环境:有一套管理系统(包括联机和批量),该管理系统白天运行联机系统,晚上运行批量系统。 目的:联机系统运行到晚上,会停掉,这时候通过在unix下的sh脚本调用并且启动批量系统。 sh脚本可以调用java程序,通过java程序就可以启动了批量系统。 andilyliao写道最简单的方法你可以用java写一
如何把.java程序变成.exe可执行文件有两种比较易用的方法:关于两种将Java程序转化为.exe程序工具的使用及比较一JSmooth1.出品Jsmooth,Sourceforge.NET2.类型free3.下载4.步骤a)利用Eclipse将所需要的主类打成可独立运行的jar包,注意添加manifest属性和MainClass。b)新建一个Jsmo
如何用pdb进行python调试?本文章讲述了如何用pdb进行python调试讲解.当手边没有IDE,面对着python调试犯愁时,你就可以参考下本文;(pdb命令调试)和(pdb)help用pdb进行python调试,用法基本和gdb差不多,先看一个简单的例子:epdb1.py.#epdb1.py--experimentwiththePythondebugger,pdba=\"aaa\"
java如何调用exe文件?publicclasstransferExe{\x0d\x0apublicstaticvoidmain(String[]args){\x0d\x0aopenWinExe();\x0d\x0aopenExe();\x0d\x0a}\x0d\x0a//用Java调用windows系统的exe文件,比如notepad,calc之类\x0d\x0apublicstatic
2025-02-01 20:24:39
2025-02-12 03:21:37
2025-02-10 15:19:48
2025-01-28 17:58:32
2024-11-22 05:08:01
2024-09-10 08:50:00