要在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函数
给您推荐相同类型的内容:
在物理学中,1w是多少js
根据量纲可知,1W=1js,实际上你因该知道功率是表示每秒做了多少功,这里是每秒做1焦耳的功,那么功率自然是1W了啊。。。至于你说的j*s,是普朗克常数单位,根据量纲可知1W=1s^2js把看到的区域当画布,创建足够能展现界面的Dom就go语言中全局变量和局部变量的区别
局部变量在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量。以下实例中 main() 函数使用了局部变量 a, b, c:package mainimport "fmt"func如何在windows下安装GIT
本文在Windows7下测试成功。安装和设置Git下载Git for Windows,采用默认安装,安装完成后就可以在本地使用Git了。但要将内容放到Github上,必须先在Github网站上注册个账户,然后在本机使用Git创建SSH Kehtml+css做网页时,如何让整张网页居中显示
使用CSS 语法要设定一个div 水平置中,是很常见到的需求,最多人使用margin: 0 auto这个方法就可以达成。但是,如果要让一个div 同时间做到在网页上水平置中还要垂直置中,也就是CSS 上下左右置中这就有点麻烦了,不太容易喔!节约用钱的名言警句
1、节用免求人。 2、一粥一饭,当思来处不易;半丝半缕,恒念物力维艰。 3、细水和流,吃穿不愁。 4、黄金本无种,出自勤俭家。 5、钱是一块一块上万,麦是一颗一颗上石。 6、精打细算,有吃有穿;大吃大喝,当屋卖锅。JAVA中的泛型类是什么东西?
泛型(Generictype或者generics)是对Java语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。x0d怎么吧go程序打包成可运行的EXE文件
你在编译器里面build一下,然后去bindebug目录下找.exeexe就是可执行文件了。运行的时候可能需要用到debug目录下的其他文件(如配置文件、dll等),所以需要把debug下的所有文件都放到一起。对比于其他语言的程序,Gocss让表格第一列和第一行固定
给你提供个思路:第一行为一行多列的表格;第一列为一列多行的表格;剩下就是一个表格了。然后把这些表格都放在一个div里面,并设置其样式1、表头:点菜单“文件”—“页面设置",点“工作表”标签,在“顶端标题行”中输入表头地址区域—“确电脑辐射的危害和防护方法介绍
电脑辐射的危害 1、电脑屏幕发出的低频辐射与磁场,会导致7~19种病症,包括眼睛痒、颈背痛、短暂失去记忆、暴躁及抑郁等。有的出现眼睛痒、干燥和酸涩,眼睛只是处于功能性损伤的阶段,但是如果这时还不注意保护眼睛,使眼睛继续长期处于干燥的怎么把手绘板和电脑连接
你可以先去【绘学霸】网站找“板绘CG绘画厚涂”板块的【免费】视频教程-【点击进入】完整入门到精通视频教程列表: www.huixueba.netwebAppWebClientAllCourseAndResourcePage?t关于css控制div的缩放问题
比如,建立4个div,要实现宽度随窗口变化而变化很简单,把宽度设成百分比形式就可以了。 css这样写: 这样的话我们的div倒是可以随着窗口的变化进行宽度的缩放,但是高度是不变的,这样肯定不行,我们要达到按比例缩放的话高度肯定也是要js中字符串的常见方法
首先创建一个字符串,创建字符串的方法有两种: 1.字面量:var str = "abc123efg456" 2.构造函数:var str = newString("abc123efg456")html、css怎么在<style><style>里添加本地图片
可以使用<img>标签,下面演示一下:1、准备一个html文件和一张图片,并放在同一个文件夹里面2、打开html文件,按下图中红色框选出来的位置在body标签里面输入<img src=".t怎样把电脑的字体变小
问题一:怎样才能让电脑上面的字体变小设置电脑字体调小的步骤如下: 1在电脑桌面右键点击屏幕分辨率选项。 2点击放大或缩小文本和其他项目。 3选择较小(骇)-100%选项后点击应用就可以。问题二:电脑字体整体变大,苹果笔记本电脑怎么用
苹果笔记本电脑用法如下:一、单指:选中:单指单击。打开文件:单指双击。二、双指右键功能:使用两个手指点击。滚屏:双指上下移动。放大缩小网页内容:双指张开捏合。前后翻页:双指左右滑。智能缩放:在网页上双指双击(仅SafariR语言基本数据分析
R语言基本数据分析本文基于R语言进行基本数据统计分析,包括基本作图,线性拟合,逻辑回归,bootstrap采样和Anova方差分析的实现及应用。不多说,直接上代码,代码中有注释。1. 基本作图(盒图,qq图)#basic plotboxplhtml中,怎么把背景图片置于最低层
1、用css的z-index的属性就可以实现。首先新建一个html文件,在文件中写入一个div容器和一个图片:2、然后在上方设置它们的样式,这里给div设置成绝对定位,图片设置成相对定位,然后设置一下它们的z-index属性,该属性用来显示联想能查到维修记录吗
联想笔记本维修的时候都要确认该笔记本是否还在保修期内,因为有没有保修价格收费就都不是一回事了。如果在保修内可以剩下不少的钱呢,那要如何查询呢?!工具原料联想笔记本方法步骤15分步阅读第一步,进入联想官网,查询保修信息页面:25需要主网页的优化问题.怎样避免CSS样式表重复下载
可以把大的CSS裁开啊例如INDEX.HTML INDEX.ASP INDEX1.ASP 调用 公共.CSS INDEX.CSSSOFT.HTM SOFT.ASP ..调用 公共.CSS SOFT.CSS把公共的文本样式集中到一个CSS再把javascript脚本F12快捷方法没有用怎么办
javascript脚本F12快捷方法没有用的话,可以先将浏览器关闭,然后在打开,再按F12试试,要是还不行,检查浏览器的JavaScript功能开启没有;还是不行的话就重新安装浏览器。<script language=&quo学习python,用什么软件?
Python开发软件可根据其用途不同分为两种,一种是Python代码编辑器,一种是Python集成开发工具,两者的配合使用可以极大的提高Python开发人员的编程效率,以下是常用的几款Python代码编辑器和Python集成开发工具。一、PPython中的哈希表——字典
一开始看到哈希表这个词,感觉非常的陌生,因为是从hash音译过来的,但是哈希表是一种非常有用的数据结构,可以提高效率。其实Python中的字典,就是一种典型的哈希表结构。用字典这个词,其实更好理解: 字典的结构是这样子的,总是成对出现:苹果电脑怎么格式化
1、首先我们在应用程序李找到实用工具,然后在实用工具里找到磁盘工具,然后在磁盘工具里找到你想要格式化的那个磁盘。2、然后选择图中上方的抹掉也就是格式化,在下面的菜单中选择需要格式化的磁盘,然后在名称内输入磁盘的名称。https:copy装电脑主板的岗位及职责
是需要工这样的工作还是了解呢?装主板一般是属于电脑店方面的工作或者工厂维修或者包装方面的,主要了解主板架构和安装方式主板结构所谓主板结构就是根据主板上各元器件的布局排列方式,尺寸大小,形状,所使用的电源规格等制定出的通用标准,所有主板厂商都如何用ruby统计数组或哈希中不同元素的个数
得到不同数据的值:%w(a b c a c d).uniq得到各个元素出现的个数:count_hash = {}%w(a b c a c d).each do |item|key = item.to_symif count = co代码语言有哪些?
编程语言现在都有哪些? 机器语言:纯粹的机器代码汇编语言:8086汇编、Win32汇编、.NET的汇编高级语言:Basic、Pascal、Object Pascal、C、C++、C#、Java、ASP、ASP.NET、Pergo语言和java哪个前景好一点?
go语言和java,go语言更有前途。1.Java仍然是主流的企业级应用编程语言,看看阿里,华为等大厂的招聘岗位就知道了。2.Go语言代表了未来,很多新兴上市公司,如B站,高途课程等用Go做主编程语言。我所知道的一些创业公司,也开会尝试用Ruby可以写游戏不?有没有已经用Ruby写的游戏,我能参考一下,求网址。
我的第一次回答似乎没出现。Ruby可以写游戏。基本上Ruby可以调用Windows API和DirectX API或者使用.net,在开发能力和开发速度上拥有优势。著名的RPG制作大师(RPG Maker VX)就是使用Ruby作为核心的(Go语言编程入门时需要注意什么
刚入门Go语言小白需要注意以下五点:1、注意书写代码的一些规范吧,特别是注意大小写、英文标点符号区别等,在特别的位置写上注释。2、主要是理解伪代码所描述的算法,伪代码要注意是不能直接运行的。3、注意编译器版本与书籍上所介绍版本是否一致,也注如何用matlab和R语言画K线图
采用默认的ChartSeries绘制K线图library(quantmod)data_origin=read.csv("data.csv",header = F)data<-data.frame(Op