要在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函数
给您推荐相同类型的内容:
java dom4j 复制节点
已测试,每次都是在后面添加节点。import java.io.Fileimport java.io.FileWriterimport org.dom4j.Documentimport org.dom4j.Elementimport org.用html5还需要css javascrip吗?各自的分工是什么?
用html5是需要css javascrip的。css是必须要用到的,如果不使用css,网页内容就不会被更好的美化和展示出来。x0dx0aHTML是由多种骨头(标签)组成的骨架。x0dx0aHTML5是更多的新骨头(标签),同时去掉css不能动态地对网页各元素进行格式化
可用以下方式解决。1、删除行内元素之间的换行符、tab(制表符)、空格等字符写代码的时候,在li之间不要有间隙,可以把代码格式化,放在一行显示。2、给父辈元素设置font-size:0,该方法需要重新给元素单独设置字体大小属性。3、更改代码ruby女孩名字什么寓意
ruby含义为“红宝石”,象征着高贵、珍贵、尊贵、稀有,形容女孩高贵不凡,体现出女孩的高贵优雅形象。这个英文名中文翻译为“露比”或者“鲁比”,读起来比较中性化,但不失女性色彩,作为女孩英文名,给人落落大方之感。好听的英文名字:1、Ros如何用C语言对文件进行加密和解密?
对于加密要求不高的完全可以自己定义规则来进行加密。这种加密是很简单很自由的,例如你在存文件的时候可以将文件中的每个字符都加上一个数,然后读取该文件的时候再每个字符相应地减去那个数,即可实现就简单的加密,这样你储存的文件看上去就是乱码了。只是JS函数的参数如何设置
1.php有个很方便的用法是在定义函数时可以直接给参数设默认值,如:<br><br>function simue ($a=1,$b=2){<br> return $a+支持html5的浏览器有哪些
目前,支持Html5的浏览器包括Firefox(火狐浏览器)、IE9及其更高版本、Chrome(谷歌浏览器)、Safari、Opera等;国内的傲游浏览器(Maxthon)、以及基于IE或Chromium(Chrome的工程版或称实验版)所用js怎么写一个回车键盘事件
一、设计思路:设计一个简单的输入对话框,然后按下enter进行输入事件。二、聊天输入框的代码如下:三、此时的页面展示如下:四:设计函数,使得输入文字时,按下按钮可以提交到聊天框。五、此时在页面上测试,输入一段文字:六、执行结果如下:七、设css不能动态地对网页各元素进行格式化
可用以下方式解决。1、删除行内元素之间的换行符、tab(制表符)、空格等字符写代码的时候,在li之间不要有间隙,可以把代码格式化,放在一行显示。2、给父辈元素设置font-size:0,该方法需要重新给元素单独设置字体大小属性。3、更改代码解决firefox浏览器的css属性兼容性问题可添加什么前缀
可以加"-moz-"。这个前缀主要用于低版本火狐浏览器css3的兼容。由于css3刚出来的时候,各浏览器没有统一,所以低版本需要加兼容前缀,后面的版本已经统一了就可以不加前缀也能正常显示。也可以使用js插件自动加前缀。-python难还是ruby难
一、异同对比选择1、Python和ruby的相同点:·都强调语法简单,都具有更一般的表达方式。python是缩进,ruby是类basic的表达。都大量减少了符号。·都是动态数据类型。都是有丰富的数据结构。·都具有C语言扩展能力,都具js 中如何取出数组中的值?
需要准备的材料分别有:电脑、html编辑器、浏览器。1、首先,打开html编辑器,新建html文件,例如:index.html,编写问题基础代码。2、在index.html中的<script>标签,输入js代码:$有没有比较强大的html+js+css编辑器
推荐Hbuider,个人感觉比eclipse和dreamweaver好用。。特点:轻量,只有几M,就算全部插件安装也只有三百M。测试方便:可以直接打包成app运行到安卓或苹果模拟器和真机里。app配置简单,上手速度快。全中文界面。可以新建mjs中常见的数据加密与解密的方法
加密在我们前端的开发中也是经常遇见的。本文只把我们常用的加密方法进行总结。不去纠结加密的具体实现方式(密码学,太庞大了)。 常见的加密算法基本分为这几类, RSA加密:RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中Rc语言中char是什么意思
在C语言中“char”是可容纳单个字符的一种基本数据类型,即char是字符变量的说明符。字符变量的取值是字符常量,即单个字符。字符变量类型说明的格式和书写规则都与整型变量相同。在CC++中,对程序员所要输入的变量要给予其类型,主要的的数python可以接外国的活动吗
可以。一、国内接单平台1.程序员客栈:https:www.proginn.com程序员客栈中国非常领先的自由工作平台,为中高端程序员、产品经理和设计师等等互联网相关人员提供稳定的线上工作机会,包括自由工作、远程工作和兼职工作,还支持按需css中p后面符号怎么写
在 html 语言中,<p>被定义为段落标记,文档中任何适用于段落的地方,都可以出现p标签,例如文档的主体、列表、表格等元素中。p标签是一个块级元素,可CSS规定宽、高属性,代码﹤p style="widtpython怎么设置path路径?
path就是环境变量的一个路径,如果安装的时候没勾选这项,在cmd输入python能够调用的话就可以不用管它,如果报错,自己手动添加一下就可以了,具体步骤如下:1、鼠标右击我的电脑---属性---高级系统设置---“环境变量”2、选择‘P用js怎么写一个回车键盘事件
一、设计思路:设计一个简单的输入对话框,然后按下enter进行输入事件。二、聊天输入框的代码如下:三、此时的页面展示如下:四:设计函数,使得输入文字时,按下按钮可以提交到聊天框。五、此时在页面上测试,输入一段文字:六、执行结果如下:七、设go语言的reflect(反射)
1、反射可以在运行时 动态获取变量的各种信息 ,比如变量的类型、类别; 2、如果是结构体变量,还可以获取到结构体本身的信息(包括结构体的字段、方法); 3、通过反射,可以修改 变量的值 ,可以调用关联的方法; 4、使用反射,需要Ruby的语言用途
Ruby 是开源的,在Web 上免费提供,但需要一个许可证。 Ruby 是一种通用的、解释的编程语言。Ruby 是一种真正的面向对象编程语言。Ruby 是一种类似于 Python 和 Perl 的服务器端脚本语言。Ruby怎么彻底删除ruby1.8,换成1.9
1、执行ruby -v确定版本2、执行whereis ruby找到ruby安装的位置。可能有多个位置。将每一个path的ruby都执行一下-v。比如 usrbinruby -v。看下哪个是你安装的1.9.3版本。假如就是usrbihtml中的<b>是什么意思?
这是一个加粗的标签,比如加粗某段文字,例如:<b>这段是加粗文字<b>这里就会加粗这段文字,不过html5淘汰了这个标签,用css里的属性控制了。此元素在 Internet Explocss不能动态地对网页各元素进行格式化
可用以下方式解决。1、删除行内元素之间的换行符、tab(制表符)、空格等字符写代码的时候,在li之间不要有间隙,可以把代码格式化,放在一行显示。2、给父辈元素设置font-size:0,该方法需要重新给元素单独设置字体大小属性。3、更改代码h5端登录是什么?
h5端登录的意思是第5代HTML,也指用H5语言制作的一切数字产品。HTML是一种组成网页的标记语言。在HTML5的当前规范集下可以直接标记视频、声音效果甚至进行绘画,这与上一代HTML4在功能上有着质的飞跃。首先要登陆自己的账号,这个工具用js怎么写一个回车键盘事件
一、设计思路:设计一个简单的输入对话框,然后按下enter进行输入事件。二、聊天输入框的代码如下:三、此时的页面展示如下:四:设计函数,使得输入文字时,按下按钮可以提交到聊天框。五、此时在页面上测试,输入一段文字:六、执行结果如下:七、设支持html5的浏览器有哪些
目前,支持Html5的浏览器包括Firefox(火狐浏览器)、IE9及其更高版本、Chrome(谷歌浏览器)、Safari、Opera等;国内的傲游浏览器(Maxthon)、以及基于IE或Chromium(Chrome的工程版或称实验版)所解决firefox浏览器的css属性兼容性问题可添加什么前缀
可以加"-moz-"。这个前缀主要用于低版本火狐浏览器css3的兼容。由于css3刚出来的时候,各浏览器没有统一,所以低版本需要加兼容前缀,后面的版本已经统一了就可以不加前缀也能正常显示。也可以使用js插件自动加前缀。这如何用C语言编写一个迷宫程序?
#include <graphics.h>#include <stdlib.h>#include <stdio.h>#include <conio.h&amR语言学习由浅入深路线图
R语言学习由浅入深路线图_数据分析师考试现在对R感兴趣的人越来越多,很多人都想快速的掌握R语言,然而,由于目前大部分高校都没有开设R语言课程,这就导致很多人不知道如何着手学习R语言。对于初学R语言的人,最常见的方式是:遇到不会的地方,就