`
- 浏览:
637115 次
- 性别:
- 来自:
苏州
-
jni之:window7下MinGw+ eclipse 3.6 + cdt创建第一个jni项目
jni的编写和编译需要有以下这些东西:
1. javah.exe:为java中的native函数生成头文件
2. jni的头文件:实现native函数时要使用jni.h中的东西,我这边是在:
c:\Java\jdk1.6.0_25\include;
c:\Java\jdk1.6.0_25\include\win32
3. c的头文件:使用c的标准库必须要用到,我这边是在:
D:\Program\mingw\include;
4. c++的头文件:使用c++的标准库必须要用到,我这边是在:
D:\Program\mingw\lib\gcc\mingw32\4.8.1\include\c++;
D:\Program\mingw\lib\gcc\mingw32\4.8.1\include\c++\mingw32;
D:\Program\mingw\lib\gcc\mingw32\4.8.1\include\c++\backward;
5. c,c++编译器:编译c, c++需要使用,一般是用g++
上面的东西缺一不可,缺少了要么就是编写代码时无法代码提示,要么就是代码编辑时全是提示错误,要么就是编译时出错等。
接下来就开始创建一个jni工程, 并在创建过程中不断的解决各种问题:
(1)启动eclipse, 选择一个workspace.
(2)启动好后, 新建一个java项目: _code_jni
新建的项目
(3)创建一个java类, com.code.Main
(4)在Main类中添加一些代码
(5)在项目下创建一个jni文件夹, 用来存放jni代码.(项目上右击-> new -> folder -> 输入文件夹名称jni -> finish).
(6)使用之前创建的javah.exe快捷菜单为Main类生成jni头文件(会自动生成到jni文件夹中), 选中Main.java文件, 然后点击工具栏上的javah.exe快捷菜单.
生成的jni头文件:
(7)生成的jni头文件仅仅是一份声明, 接下来要为其编写定义, 但当前的项目是一个java项目, 是无法编译c/c++代码的, 所以首相要将java项目转换为c/c++项目.
(8)接下来创建jni头文件的定义文件, com_code_Main.cpp
同时不要忘了将jni文件夹设置为c++的source folder, 否则c++编译器是不会编译jni文件夹中的文件的.
项目上右击 -> Properties -> C/C++ Gerneral -> Paths and Symbols -> Source Location选项卡 -> Add Folder -> 选择jni文件夹 -> OK
(9)都创建好了, 我们就尝试运行下这个项目吧. 在项目上右击 -> Run As -> Java Application. 但此时遇到了编译错误, 找不到jni.h文件.
原因就是jni.h头文件不会自动添加到编译搜索路径上来, 需要我们手动添加, 那就添加一下, jni头文件的搜索路径(C:/Java/jdk1.6.0_25/include和C:/Java/jdk1.6.0_25/include/win32).
项目上右击 -> Properties -> C/C++ General -> Paths ans Symbols -> Includes选项卡 -> GNU C -> Add -> 分别添加C:/Java/jdk1.6.0_25/include和C:/Java/jdk1.6.0_25/include/win32.
注意:我这边用的4.8.1的MinGW, 所以会自动将c,c++标准库的路径自动添加到编译器搜索路径上来, 如果使用了其它版本的MinGW没能自动添加, 那就手动添加一下好了, 有两种方法来添加:
(1)手动在这边添加
(2)添加在windows的环境变量中, 创建两个变量: C_INCLUDE_PATH和CPLUS_INCLUDE_PATH
c标准库的搜索路径包括(我的机器上是):
D:\Program\mingw\include
D:\Program\mingw\lib\gcc\mingw32\4.8.1\include
D:\Program\mingw\lib\gcc\mingw32\4.8.1\include-fixed
D:\Program\mingw\mingw32\include
c++标准库的搜索路径包括(我的机器上):
D:\Program\mingw\include
D:\Program\mingw\lib\gcc\mingw32\4.8.1\include
D:\Program\mingw\lib\gcc\mingw32\4.8.1\include-fixed
D:\Program\mingw\mingw32\include
D:\Program\mingw\lib\gcc\mingw32\4.8.1\include\c++
D:\Program\mingw\lib\gcc\mingw32\4.8.1\include\c++\mingw32
D:\Program\mingw\lib\gcc\mingw32\4.8.1\include\c++\backward
(10)再次运行项目, 发现没有错误了, 但java控制台上也没有任何输出, 因为还没写代码么, 接下来就开始加入代码.
(11)Main.java类加入代码, 并再次运行.
此时会遇到找不到库文件的错误, 主要有两个原因:
(1)我们需要添加一个jvm的运行参数来告知到哪边去找这个库文件.
(2)生成的库文件还没看到呢
(12)添加一个vm参数来告知到哪去找库文件. 在项目上右键 -> Run As -> Run Configurations -> Arguments标签 -> VM arguments加入: -Djava.library.path=".;${project_loc}\libs;${env_var:PATH}", 然后点击apply应用.
(13)这边将生成的库文件放在libs文件夹下, 所以先创建一个libs文件夹(项目上右击 -> new -> folder -> 输入文件夹名称libs -> finish).
然后配置编译器选项, 在编译好后自动将库文件copy到libs文件夹下; 以及配置生成的库文件名叫什么.
xcopy "${BuildArtifactFilePrefix}${BuildArtifactFileName}" "${workspace_loc:${ProjName}/libs}" /Y
(14)两个都设置好后再次编译项目(注意是编译不是运行哦)
可能会遇到, 无需编译的提示, 只要修改任意一个.cpp文件, 然后执行一下保存, 再编译就可以了:
(15)此时刷新libs文件夹, 发现库文件已经生成了.
如果遇到没生成库文件, 可能就是没创建libs文件夹, 没创建libs文件夹时会有这样的提示.
(16)库文件生成后, 再次运行项目. (项目上右击 -> Run As -> Java Application), 但此时又会遇到一个错误, Exception in thread "main" java.lang.UnsatisfiedLinkError: com.code.Main.getInt()I, 找不到native方法.
初步分析, 找不到getInt方法, 要么就是com_code_Main这些东西没编进.dll中; 要么就是编译器的生成的方法标识符有问题, 后来经过百度, 确定是编译器生成的方法标识符有问题.(http://java.chinaitlab.com/base/838280.html)
解决办法就是对MinGW提供的编译器进行一些配置: 项目右击 -> Properties -> C/C++ Build -> Settings -> MinGW C++ Linker -> Miscellaneous -> Tool Settings -> Linker Flags -> 加入: -Wl,--add-stdcall-alias 参数
(17)然后再编译Build, 运行. 发现世界瞬间变美好了, 终于成功了.
参考链接:
轻松使用Eclipse CDT进行Java JNI编程: http://jingyan.baidu.com/article/9c69d48f53575d13c9024ec1.html
Eclipse下配置CDT和MinGW:http://www.cnblogs.com/cuberub/archive/2012/03/24/EclipseCDT.html
创建过程中可能遇到的一些其它问题:
可能遇到的问题:
(1)编译器输出乱码, 菜单 -> Window -> Preferences -> C/C++ -> Build -> Environment -> Add -> 名称: lang, 值: en_US
- 大小: 35.5 KB
- 大小: 6.8 KB
- 大小: 60.1 KB
- 大小: 8.6 KB
- 大小: 22.4 KB
- 大小: 48.6 KB
- 大小: 99.6 KB
- 大小: 36.8 KB
- 大小: 32.4 KB
- 大小: 94 KB
- 大小: 24.8 KB
- 大小: 59.5 KB
- 大小: 70.7 KB
- 大小: 88.4 KB
- 大小: 10.9 KB
- 大小: 33.9 KB
- 大小: 62 KB
- 大小: 14.5 KB
- 大小: 36 KB
- 大小: 62.8 KB
- 大小: 68 KB
- 大小: 28.7 KB
- 大小: 55.5 KB
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
ysoserial是一个用于生成利用不安全的Java对象反序列化的有效负载的概念验证工具。它包含一系列在常见Java库中发现的"gadget chains",可以在特定条件下利用执行不安全的反序列化操作的Java应用程序。ysoserial项目最初在2015年AppSecCali会议上提出,包含针对Apache Commons Collections(3.x和4.x版本)、Spring Beans/Core(4.x版本)和Groovy(2.3.x版本)的利用链
1、嵌入式物联网单片机项目开发例程,简单、方便、好用,节省开发时间。 2、代码使用IAR软件开发,当前在CC2530上运行,如果是其他型号芯片,请自行移植。 3、软件下载时,请注意接上硬件,并确认烧录器连接正常。 4、有偿指导v:wulianjishu666; 5、如果接入其他传感器,请查看账号发布的其他资料。 6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件有差异,请根据自身情况调整代码,程序仅供参考学习。 8、代码有注释说明,请耐心阅读。 9、例程具有一定专业性,非专业人士请谨慎操作。
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
**Oracle 10g DBA学习手册:安装Oracle和构建数据库** **目的:** 本章节旨在指导您完成Oracle数据库软件的安装和数据库的创建。您将通过Oracle Universal Installer (OUI)了解软件安装过程,并学习如何利用Database Configuration Assistant (DBCA)创建附加数据库。 **主题概览:** 1. 利用Oracle Universal Installer (OUI)安装软件 2. 利用Database Configuration Assistant (DBCA)创建数据库 **第2章:Oracle软件的安装与数据库构建** **Oracle Universal Installer (OUI)的运用:** Oracle Universal Installer (OUI)是一个图形用户界面(GUI)工具,它允许您查看、安装和卸载机器上的Oracle软件。通过OUI,您可以轻松地管理Oracle软件的安装和维护。 **安装步骤:** 以下是使用OUI安装Oracle软件并创建数据库的具体步骤:
消防验收过程服务--现场记录表.doc
数据库管理\09-10年第1学期数据库期末考试试卷A(改卷参考).doc。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
职业暴露后的处理流程.docx
Java Web开发短消息系统
项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7
这是一款可以配置过滤目录及过滤的文件后缀的工具,并且支持多个项目同时输出导出,并过滤指定不需要导出的目录及文件后缀。 导出后将会保留原有的路径,并在新的文件夹中体现。
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
YOLO算法-挖掘机与火焰数据集-7735张图像带标签-挖掘机.zip
操作系统实验 Ucore lab5
IMG_5950.jpg
竞选报价评分表.docx
java系统,mysql、springboot等框架
1、嵌入式物联网单片机项目开发例程,简单、方便、好用,节省开发时间。 2、代码使用IAR软件开发,当前在CC2530上运行,如果是其他型号芯片,请自行移植。 3、软件下载时,请注意接上硬件,并确认烧录器连接正常。 4、有偿指导v:wulianjishu666; 5、如果接入其他传感器,请查看账号发布的其他资料。 6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件有差异,请根据自身情况调整代码,程序仅供参考学习。 8、代码有注释说明,请耐心阅读。 9、例程具有一定专业性,非专业人士请谨慎操作。
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
内容概要:本文详细讲解了搜索引擎的基础原理,特别是索引机制、优化 like 前缀模糊查询的方法、建立索引的标准以及针对中文的分词处理。文章进一步深入探讨了Lucene,包括它的使用场景、特性、框架结构、Maven引入方法,尤其是Analyzer及其TokenStream的实现细节,以及自定义Analyzer的具体步骤和示例代码。 适合人群:数据库管理员、后端开发者以及希望深入了解搜索引擎底层实现的技术人员。 使用场景及目标:适用于那些需要优化数据库查询性能、实施或改进搜索引擎技术的场景。主要目标在于提高数据库的访问效率,实现高效的数据检索。 阅读建议:由于文章涉及大量的技术术语和实现细节,建议在阅读过程中对照实际开发项目,结合示例代码进行实践操作,有助于更好地理解和吸收知识点。