要在java中调用c语言的库,需要使用Java提供了JNI。\x0d\x0a举例说明\x0d\x0a在c语言中定义一个voidsayHello()函数(打印HelloWorld)然后在Java中调用这个函数显示HelloWord.\x0d\x0a现在分别从Java和C语言两部分说明:\x0d\x0a1.Java部分\x0d\x0a首先定义一个HelloNative,在其中申明sayHello函数,函数要申明为Native类型的.如下:\x0d\x0apublicclassHelloNative{\x0d\x0apublicnativevoidsayHello()\x0d\x0a}\x0d\x0a\x0d\x0a编译这个类,生成class文件:\x0d\x0ajavacHelloWorld.java\x0d\x0a\x0d\x0a利用javah生成需要的h文件\x0d\x0ajavahHelloNative\x0d\x0a\x0d\x0a生成的h文件大概如下:\x0d\x0a\x0d\x0a/*DONOTEDITTHISFILE-itismachinegenerated*/\x0d\x0a#include\x0d\x0a/*HeaderforclassHelloNative*/\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\x0aJNIEXPORTvoidJNICALLJava_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用来实现显示HelloWorld的函数.如下:\x0d\x0a\x0d\x0a#include\x0d\x0a#include"HelloNative.h"\x0d\x0a\x0d\x0aJNIEXPORTvoidJNICALLJava_HelloNative_sayHello(JNIEnv*,jobject)\x0d\x0a{\x0d\x0aprintf("HelloWorld!\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-olibHelloNative.soHelloNative.cpp\x0d\x0a\x0d\x0a这样就会在当前目录下生成一个libHelloNative.so的库文件.这时需要的库已经生成,在C语言下的工作已经完成了.\x0d\x0a接下来需要在Java中编写一个程序测试一下.在程序前,需要将我们的库载入进去.载入的方法是调用Java的System.loadLibrary("HelloNative")\x0d\x0a\x0d\x0apublicclassTestNative\x0d\x0a{\x0d\x0astatic{\x0d\x0atry{\x0d\x0aSystem.loadLibrary("HelloNative")\x0d\x0a}\x0d\x0acatch(UnsatisfiedLinkErrore){\x0d\x0aSystem.out.println("Cannotloadhellolibrary:\n"+e.toString())\x0d\x0a}\x0d\x0a}\x0d\x0apublicstaticvoidmain(String[]args){\x0d\x0aHelloNativetest=newHelloNative()\x0d\x0atest.sayHello()\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0a但是再编译后,运行的时候,问题又出现了.\x0d\x0aCannotloadhellolibrary:\x0d\x0ajava.lang.UnsatisfiedLinkError:noHelloNativeinjava.library.path\x0d\x0aExceptioninthread"main"java.lang.UnsatisfiedLinkError:HelloNative.sayHello()V\x0d\x0aatHelloNative.sayHello(NativeMethod)\x0d\x0aatTestNative.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)设置环境变量exportLD_LIBRARY_PATH=.:$LD_LIBRARY_PATH,将当前的目录加入到LD_LIBRARY_PATH中\x0d\x0a3)设置java的选项,将当前的目录加入到其中.java-Djava.library.path=.$LD_LIBRARY_PATH\x0d\x0a这样之后程序就能够成功的运行了.可以看见显示的"HelloWorld!"了要在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函数
给您推荐相同类型的内容:
电脑屏幕中间出现一个亮度的图标怎么关闭?
因为explorer.exe程序有问题,解决方法如下:1、双手同时按住“Ctrl+Alt再按小键盘上的”Del“键。调出任务管理器。2、点击上方的“进程”。3、在进程中找“explorer.exe”,如果有将它删除。4、删除后点击上方的“文C语言考试题
word编辑,大小写可能有问题一、填空题1、一个C语言程序的语句至少应包含一个__函数____。2、C语言源程序文件的扩展名是__ .C ____,经过编译、连接后,生成文件的扩展名是__编译后为.obj 连接后为.exe ____。3电脑怎样打表格?
如何在电脑上制作简单的表格? 步骤:1、 打开Excel表格编辑器。2、做出基本框架,选中表格全部。3、右击鼠标,会出现一个表,点击“设置单元格”。4、第四步 会出现一个对话框,点击“对齐”选中水平“居中”和垂弧“居中”。怎么设置电脑屏幕锁?
鼠标单击开始菜单,找到并点击Windows系统,控制面板,选择用户账户,再次点击用户账户,电脑设置中更改我的账户信息,选择登录选项,密码,添加,输入新密码和确认密码及密码提示,接着点击下一步,完成即可。设置密码不光能防止别人用你的电脑,还可怎么看一个网站是用什么语言编写出来的?
看一个网站是用什么语言编写出来的方法是:通用的可以用firebug或者chrome的工具来查看网页的Response Headers。还可以根据网址的后缀来判断。看一个网站是用什么语言编写出来的具体方法是:1.首先我们打一个你想查看的那谁能帮我翻译一下,在线急!!!
John Smith 是一个纽约的工人,他丢了他的工作,尽管他很努力的去找工作,他还是失败了。一天,当他在街上走着,寻找工作的时候,他看见一个很大的水果商店。他看见几个工人正在搬运放着水果的箱子。他走过了商店,又绕了回来。他走进了商店的办公go 语言 的 文件 怎么打开
1、下载go的zip文件。并且一定要把文件解压到c:go目录下。 2、配置windows的高级环境变量。包括:GOROOT、GOOS、GOBIN、GOARCH。并且在path变量里面把c:gobin加入。以便可以在命令行直接运行go命angularjs怎样判断语句
用三目运算符。使用ng-switch结构。使用ng-if。angularjs中的判断语句说明。由于angularjs不支持if-else结构,所以判断的写法如下:用三目运算符:<span>{{isLarge ?请问如何用CSS固定页面大小
请问如何用CSS固定页面大小#content{width:1000pxheight:2000pxoverflow:hidden}* overflow:hidden超出的内容隐藏掉 * 希望能帮到你 Dreamweaver做的做设计的用什么电脑好
问题一:做设计用什么笔记本好品牌就不推荐了,但有几个重要指标你需要牢记: 1、大屏幕,最好15寸以上,尽量不要用15寸以下的,17或19寸最好; 2、独立显卡,除非万不得已不要选集成显卡的,最好是显存2G以上的; 3、大内存电脑什么系统好用?
电脑上目前常用的是windows7系统、windows8系统、windows10系统。以上三个系统系统可分为32位和64位,其中64位系统是最高的系统,三者之间没有高低之分,可根据自己的喜好去选择。win7系统:该系统是由微软公司let it go 25种语言音译歌词
English: "The snow glows white on the mountain tonight, not a footprint to be seen."French: "Un royaume d我想出售一台二手电脑,怎么写一个出售广告?
把相关资料简单介绍下。包括配置、新旧、发票、价格。日常在出售旧电脑时,估价时出价很高,现场验证的时候平台会通过各种理由,给挑毛病,从而达到压价目的。实际上,一些回收平台常用套路基本都是估价的时候给一个较高价,让用户放松警惕。等拿到手机后会以Ruby中如何定义变量之间的引用关系?
int jimmy声明一个int类型变量 string rubystring类型变量 jimmy = Console.Read()接受输入的字符,转为int类型返回给jimmy Console.Write(jimmy)输出j中行跨境GO可以用哪些支付方式?
中行跨境GO支持支付方式:跨境GO目前支持的支付方式包括中国银行个人手机银行支付和微信支付。以上内容供您参考,业务规定请以实际为准。如有疑问,欢迎咨询中国银行在线客服。诚邀您下载使用中国银行手机银行APP或中银跨境GO APP办理相关业Ruby的块和C语言的块的区别
因为C语言的'块'和Ruby的'块'是不一样的东西。C语言的'块'除了它自己是一级作用域之外和普通的代码没有区别。至于Ruby的'块',你确定你学过Ruby?Rflask html文件中的相关操作
前端数据与后端数据的交互,从后端获取数据展示到前端 实现html的继承 page 当前页 pages 总页数 total 总条数 has_prev 是否有上页 has_next 是否有下页 prev_num 上一Mac OS 10.7.5用RVM安装ruby失败?是gcc的问题吗
可能你没有 C 有关基础, Ruby(MRI) 是用 C 实现的, 能用的编译器如我上面说的有 gcc 和 clang, 而llvm-gcc 不行.编译第一步是 .configure, 检测环境并产生 makefile, 这时就决定好露比是汤米和谁的孩子
格蕾丝。在影视剧《浴血黑帮》当中,剃刀党汤米的妻子格蕾丝是被黑手党所杀。在该剧的第三季开篇,剃刀党与黑手党发生了矛盾冲突,而汤米也眼见着妻子被人枪杀倒在了自己的怀里,难过之情溢于言表。凯蒂·卡西迪KatieCassidy凯蒂·卡西迪是70十go分析要多久
Go语言的分析取决于多方面的因素,如代码量、理解深度、复杂性等。如果是一般的小规模项目,比如几百行代码,那么通常需要几个小时来分析。但对于大规模项目,比如几万行以上,则需要更多的时间来分析,可能会有几天或更长的时间。同时,如果开发者对代码深mac中的哪个口红色号最好看?为什么呢?
MAC也是一个非常不错的化妆品品牌,受到了很多网友的喜欢,而今天小编就来跟大家介绍一下MAC的口红色号。小编本人觉得mac的小辣椒这个颜色是非常好看的,这个颜色可以说是适合于大部分的女生,而小辣椒的英文名是chili。这个颜色可以说是非常低什么是抖音脚本?脚本有什么用?
简单的说,脚本就是我们拍摄视频的依据。一切参与视频拍摄、剪辑的人员,包括摄影师、演员、服化道准备、剪辑师等,他们的一切行为和动作都是服从于脚本的。什么时间、地点、画面中出现什么,镜头应该怎么运用,景别是什么样的,服化道的准备,都是根据脚本来雀圣2小师妹谁演的?
是一个叫 李茏怡的香港 女星英文名字 Tiffany Lee 别名昵称 李亮颐(原名) 出生日期或生日 1982年09月23日 出生地点 香港 国家或地区 香港 身高 174 厘米 体重 58 公斤 原名:李茏怡星座:天秤座家庭python如何输出字符串分数水平线形式
#python输出字符串分数的水平线形式string_fs="23"#字符串分数print(f"{string_fs=}")#打印原分数list_fs=string_fs.split("r语言线性回归分析怎么看正负相关
看回归方程y=a+bx中的b值的正负,如果b是正数,就是正相关;如果b是负数,就是负相关。b值只能用来判断相关性的正负,但b并不是相关系数,相关系数在线性回归方程中是确定系数R^2的平方根R值,其正负号由b值的正负号决定。 运算符是一个符号JS弹出对话框怎么写?
【1、最基本的js弹出对话框窗口代码】这是最基本的js弹出对话框,其实代码就几句非常简单:复制代码代码如下:<script LANGUAGE="javascript"><!-- win纳什的黑人宝宝长大了吗
长大了。 据悉,小女儿Ruby是在2019年6月27日出生的,如今已经快2岁了,父亲是NBA大名鼎鼎的球星纳什,球员.据悉,小女儿Ruby是在2019年6月27日出生的,如今已经快2岁了不是的,林心如目前只有一个女儿。2016年9月7日,林如何用ANT导出HTML报告
Ant是一个类似make的工具,用来编译运行测试java程序。 构建、包装和发布过程中几乎每一件事都可以由Ant的任务来处理。JMETER的测试结果一般生成的是一份聚合报告,如果想用ANT生成具体的测试报告,需要这样的一个jar包 acss设置列表项目类型为无
使用sublime_text软件设置,操作步骤如下:1.首先需要新建一个06.html。2.定义一个html5标准声明。3.输入html网页的结构。4.添加一个ul列表后添加style标签,把列表设为没有格式。5运行网页查看效果列表项目默认为什么问号"?"
将大楷的Q写在小楷的o上的符号经转变后便成为现代的问号.另一说是认为问号起于9世纪,最初是一点并有一条向右上倾的曲线(好像.,但曲线的右部分较高).该点表示句子的终结,好像句号一般.曲线表示声调的提升,可能和早期的音乐记号有所结合.