使用NetBeans C/C++ Pack 5.5 创建程序(二)
2008-04-10 05:12
357 查看
使用 NetBeans C/C++ Pack 5.5 开始 JNI,第二部分http://www.netbeans.org/kb/55/beginning-jni-part2.html
将从创建一个简单的 Java 项目开始,向它添加一个本地方法,然后使用 NetBeans C/C++ Pack 5.5 在 C 中实现该方法。 这是教程的第二部分,它包含了在 Sun™ Linux 操作系统中创建示例 JNI 应用程序的内容。 预期持续时间:30 分钟
在 Project Name 中,输入 HelloWorld。
将 Project Location 更改为计算机上的任何目录上(以下,将该目录称为 )。
选中 Create Main Class 复选框,并接受相应文本字段的默认值。
选中 Set as Main Project 复选框。然后单击 Finish。
IDE 创建 /HelloWorld 项目文件夹。
用以下内容替换 main 方法的主体:
按 Alt – Enter,从下拉列表的 helloworld.Main行中选择 Create method nativePrint()。
在以上第二步中调用一个不存在的方法引起了一个编译错误,IDE自动提出一个解决该问题的建议。
通过删除 nativePrint() 方法的内容,并按以下形式将本地关键字插入该方法签名中,修改其主体。
应该可以成功构建该项目。
键入以下内容:
生成一个 HelloWorldNative.h C 头文件。要求为 nativePrint() 方法的本地实现提供正确的功能声明。 切换回 NetBeans IDE 窗口。
在 Project Name 中,键入 HelloWorldNative。
在 Project Location 中,键入与为“通用 Java 应用程序”项目输入的位置相同的位置,。需要的值应该已作为默认值存在。
接收所有其他字段的默认值。
选中 Set as Main Project 复选框。然后单击 Finish。
IDE 创建 /HelloWorldNative 项目文件夹。
在打开的对话框中导航到 Configuration Properties > C/C++ > GNU C Compiler > General。编辑 Additional Include Libraries 属性值。将它设置为
/include, /include/linux
这些设置对于实现用 C 代码调用 Java jni.h 库是必要的。 导航到 Configuration Properties > C/C++ > GNU C Compiler > Command Line。编辑 Additional Options 属性值。将它设置为 -shared -m32。
–shared 选项通知编译器生成一个动态库。
-m32 通知编译器创建一个 32 位二进制代码。默认情况下,在 64 位系统上编译的二进制代码是 64 位的,这在使用 32 位 JDK 时会引起很多问题。
导航到 Configuration Properties > Linker > General。编辑 Output 属性值。将其设置为 dist/HelloWorldNative.so。
这一步的目的是简化所得 SO 文件的路径,以使通过 Java 调用它更为简便。
单击 OK。
保存定义的设置。
在 Projects 视图中,导航到 HelloWorldNative > Source Files。右键单击 Source Files 节点,从上下文菜单中选择 Add Existing Item。将 IDE 指向 HelloWorldNative.h 文件。
HelloWorldNative.h 文件出现在 Source Files 下。
编辑器打开 HelloWorldNative.c 文件。
键入以下代码,编辑 HelloWorldNative.c 文件:
右键单击 HelloWorldNative 项目节点,并选择 Build Project。Output 对话框显示 Build successful。Exit value 0.
添加以下初始化代码:
按 F6 运行应用程序。
程序应正确执行,Output 对话框中应显示:
使用 NetBeans C/C++ Pack 5.5 开始 JNI,第二部分
作者: Dmitry Lipin 和 Kirill Sorokin。 本教程将介绍一个示例应用程序的创建过程,该应用程序使用 JNI 执行一些使用 C 编程语言编写的本地代码。应用程序的 Java™ 部分使用 NetBeans™ IDE 5.5;C 部分则使用 NetBeans™ C/C++ Pack 5.5。将从创建一个简单的 Java 项目开始,向它添加一个本地方法,然后使用 NetBeans C/C++ Pack 5.5 在 C 中实现该方法。 这是教程的第二部分,它包含了在 Sun™ Linux 操作系统中创建示例 JNI 应用程序的内容。 预期持续时间:30 分钟
前提条件
本教程假定您已经具备了以下一些技术的基本知识或使用经验。 l Java 编程语言 l C 编程语言 l NetBeans IDE教程需要的软件
开始之前,您需要在计算机上安装以下软件: l J2SE Development Kit (JDK™) 5.0 (下载) l NetBeans IDE 5.5(下载) l NetBeans C/C++ Pack 5.5 (下载) l gcc, make教程中使用的表示法
l - JDK 安装目录 l - 包含所创建 Java 项目的目录教程练习
l 练习 0:安装并配置教程环境 l 练习 1:设置通用 Java 应用程序项目 l 练习 2:设置 C/C++ 动态库项目 l 练习 3:构建和运行应用程序练习 0:安装并配置教程环境
该练习将指导您完成在开始本教程前要应用于系统的所需的配置更改。配置系统
将包含 gcc 和 make 实用程序的目录追加到 PATH 环境变量中。运行软件
启动 NetBeans IDE。设置通用 Java 应用程序项目
本练习的目的是创建和配置将要开发的 JNI 应用程序的 Java 部分。将要创建一个新的 Java 应用程序项目,初始化它的主类,并向该类添加本地方法。创建通用 Java 应用程序项目
选择 File > New Project。在 Categories 里,选择 General。在 Projects 里,选择 Java Application,并单击 Next。在 Project Name 中,输入 HelloWorld。
将 Project Location 更改为计算机上的任何目录上(以下,将该目录称为 )。
选中 Create Main Class 复选框,并接受相应文本字段的默认值。
选中 Set as Main Project 复选框。然后单击 Finish。
IDE 创建 /HelloWorld 项目文件夹。
编辑主类源码
右键单击主类节点,在编辑器中打开主类源码,然后在上下文菜单中选择 Open。用以下内容替换 main 方法的主体:
按 Alt – Enter,从下拉列表的 helloworld.Main行中选择 Create method nativePrint()。
在以上第二步中调用一个不存在的方法引起了一个编译错误,IDE自动提出一个解决该问题的建议。
通过删除 nativePrint() 方法的内容,并按以下形式将本地关键字插入该方法签名中,修改其主体。
private native void nativePrint();
native 关键字表示该方法在外部本地库中拥有一个实现,这样代码就可以正确编译了。但是,在运行时,该库的位置不清楚。有关详细信息,请参阅下面的配置 Java 项目部分。 按 Ctrl - F11,清除并构建项目。
应该可以成功构建该项目。
创建本地库头文件
切换至控制台,并导航到 目录。键入以下内容:
/bin/javah -o HelloWorldNative.h -jni
-classpath /HelloWorld/build/classes helloworld.Main
生成一个 HelloWorldNative.h C 头文件。要求为 nativePrint() 方法的本地实现提供正确的功能声明。 切换回 NetBeans IDE 窗口。
小结
本练习创建了一个新的“通用 Java 应用程序项目”,指定了它的位置,并定义了项目主类的包和名称。还将一个新方法添加给了主类,并将它标记为一个拥有本地实现的方法。最后,我们创建了一个 C 头文件,该头文件在后面的本地库编译中会用到。设置新的 C/C++ 动态库项目
通过本练习,可以了解到示例应用程序本地部分的创建过程。您将创建 C++ 动态库项目,并对它进行配置,使其能够构建 JNI 代码。 设置项目之后,将为本地方法创建实现,这些方法已在早些时候在应用程序的 Java 部分进行了声明。创建新的 C/C++ 动态库项目
选择 File > New Project。在 Categories 里,选择 C/C++ Development。在 Projects 里,选择 C/C++ Dynamic Library,并单击 Next。在 Project Name 中,键入 HelloWorldNative。
在 Project Location 中,键入与为“通用 Java 应用程序”项目输入的位置相同的位置,。需要的值应该已作为默认值存在。
接收所有其他字段的默认值。
选中 Set as Main Project 复选框。然后单击 Finish。
IDE 创建 /HelloWorldNative 项目文件夹。
设定项目属性
右键单击项目节点,从上下文菜单中选择 Properties。在打开的对话框中导航到 Configuration Properties > C/C++ > GNU C Compiler > General。编辑 Additional Include Libraries 属性值。将它设置为
/include, /include/linux
这些设置对于实现用 C 代码调用 Java jni.h 库是必要的。 导航到 Configuration Properties > C/C++ > GNU C Compiler > Command Line。编辑 Additional Options 属性值。将它设置为 -shared -m32。
–shared 选项通知编译器生成一个动态库。
-m32 通知编译器创建一个 32 位二进制代码。默认情况下,在 64 位系统上编译的二进制代码是 64 位的,这在使用 32 位 JDK 时会引起很多问题。
导航到 Configuration Properties > Linker > General。编辑 Output 属性值。将其设置为 dist/HelloWorldNative.so。
这一步的目的是简化所得 SO 文件的路径,以使通过 Java 调用它更为简便。
单击 OK。
保存定义的设置。
添加头文件
将生成的 /HelloWorldNative.h 头文件复制到 C/C++ Library 项目目录,/HelloWorldNative。在 Projects 视图中,导航到 HelloWorldNative > Source Files。右键单击 Source Files 节点,从上下文菜单中选择 Add Existing Item。将 IDE 指向 HelloWorldNative.h 文件。
HelloWorldNative.h 文件出现在 Source Files 下。
实现方法
右键单击 Source Files 节点,从上下文菜单中选择 New > Add Empty C File 属性。在 File Name 中,键入 HelloWorldNative,并单击 Finish。编辑器打开 HelloWorldNative.c 文件。
键入以下代码,编辑 HelloWorldNative.c 文件:
#include
#include
#include"HelloWorldNative.h"
JNIEXPORT void JNICALL Java_helloworld_Main_nativePrint
(JNIEnv *env, jobject obj)
{
printf("/nHello World from C/n");
}
右键单击 HelloWorldNative 项目节点,并选择 Build Project。Output 对话框显示 Build successful。Exit value 0.
小结
在本练习中,创建了一个新的 C/C++ 动态库,指定了它的位置,并对它进行了配置,以便能够构建 Java 方法的 JNI 实现。为在 Java 应用程序中声明的本地方法添加生成的头文件并实现它。构建并运行应用程序
本练习将完成对应用程序 Java 部分的一些最终更改。这是保证 Java 部分正确加载在前一个练习中编译的本地库所必需的。然后编译并运行最终的应用程序。配置 Java 项目
在编辑器中打开 Main.java 文件。添加以下初始化代码:
static {
System.load("/HelloWorldNative/dist/HelloWorldNative.so");
}
运行应用程序
右键单击项目节点,并从上下文菜单中选择 Set As Main Project, 将 HelloWorld Java 项目设置成主项目。按 F6 运行应用程序。
程序应正确执行,Output 对话框中应显示:
Hello World from C
BUILD SUCCESSFUL (total time: 0 seconds)
小结
本练习完成了一些最终的配置步骤,并运行了应用程序,以验证本地方法的实现来自本地 C 库。下一步
可以从这里下载本教程的源代码。 可以使用以下文档获得更多信息: l Getting Started With the NetBeans C/C++ Development Pack,NetBeans C/C++ Pack 5.5 教程 l Java Native Interface,Java Native Interface 5.0 规范相关文章推荐
- 使用NetBeans C/C++ Pack 5.5 创建程序(二)
- 使用NetBeans C/C++ Pack 5.5 创建程序(二)
- 使用NetBeans C/C++ Pack 5.5 创建程序(二)
- 使用NetBeans C/C++ Pack 5.5 创建程序(二)
- 使用NetBeans C/C++ Pack 5.5 创建程序(二)
- 使用NetBeans C/C++ Pack 5.5 创建程序(二)
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- 使用 NetBeans IDE 5.5 创建漂亮的 GUI
- 使用 NetBeans IDE 5.5 创建漂亮的 GUI
- 使用NetBeans IDE 5.5创建向导控制台
- 使用 NetBeans IDE 5.5 创建漂亮的 GUI
- 使用NetBeans IDE 5.5创建向导控制台
- 基于qml创建最简单的图像处理程序(2)-使用c++&qml进行图像处理
- 使用NetBeans IDE 5.5创建应用程序客户端
- 使用 NetBeans IDE 5.5 创建漂亮的 GUI
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- 使用NetBeans IDE 5.5创建向导控制台
- 使用NetBeans IDE 5.5创建应用程序客户端
- 使用NetBeans IDE 5.5创建应用程序客户端
- 使用NetBeans IDE 5.5创建应用程序客户端