使用NetBeans C/C++ Pack 5.5 创建程序(二)

来源:互联网 发布:淘宝买机票靠谱吗 编辑:程序博客网 时间:2024/06/01 09:20

使用 NetBeans C/C++ Pack 5.5 开始 JNI第二部分

http://www.netbeans.org/kb/55/beginning-jni-part2.html

 

使用 NetBeans C/C++ Pack 5.5 开始 JNI第二部分

作者 Dmitry Lipin Kirill Sorokin

本教程将介绍一个示例应用程序的创建过程该应用程序使用 JNI 执行一些使用 C 编程语言编写的本地代码。应用程序的 Java™ 部分使用 NetBeans™ IDE 5.5C 部分则使用 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 应用程序项目

  1. 选择 File > New Project。在 Categories 里,选择 General。在 Projects 选择 Java Application并单击 Next
  2. Project Name 输入 HelloWorld
  3. Project Location 改为计算机上的任何目录上以下,将该目录称为
  4. 选中 Create Main Class 复选框并接受相应文本字段的默认值。
  5. 选中 Set as Main Project 复选框。然后单击 Finish

    IDE 创建 /HelloWorld 项目文件夹。

编辑主类源码

  1. 右键单击主类节点在编辑器中打开主类源码然后在上下文菜单中选择 Open
  2. 用以下内容替换 main 方法的主体:
  3. Alt – Enter从下拉列表的 helloworld.Main行中选择 Create method nativePrint()
    在以上第二步中调用一个不存在的方法引起了一个编译错误IDE自动提出一个解决该问题的建议。


  1. 通过删除 nativePrint() 方法的内容并按以下形式将本地关键字插入该方法签名中修改其主体。
 
 
 
        private native void nativePrint();
 
                    

native 关键字表示该方法在外部本地库中拥有一个实现,这样代码就可以正确编译了。但是,在运行时,该库的位置不清楚。有关详细信息,请参阅下面的配置 Java 项目部分。

  1. Ctrl - F11清除并构建项目。
    应该可以成功构建该项目。

创建本地库头文件

  1. 切换至控制台,并导航到 目录。
  2. 键入以下内容  
        /bin/javah -o HelloWorldNative.h -jni
 
                -classpath /HelloWorld/build/classes helloworld.Main
 
                    


生成一个 HelloWorldNative.h C 头文件。要求为 nativePrint() 方法的本地实现提供正确的功能声明。

  1. 切换回 NetBeans IDE 窗口。

小结

本练习创建了一个新的通用 Java 应用程序项目”,指定了它的位置并定义了项目主类的包和名称。还将一个新方法添加给了主类,并将它标记为一个拥有本地实现的方法。最后,我们创建了一个 C 头文件,该头文件在后面的本地库编译中会用到。



设置新的 C/C++ 动态库项目

通过本练习可以了解到示例应用程序本地部分的创建过程。您将创建 C++ 动态库项目,并对它进行配置,使其能够构建 JNI 代码。

设置项目之后,将为本地方法创建实现,这些方法已在早些时候在应用程序的 Java 部分进行了声明。

创建新的 C/C++ 动态库项目

  1. 选择 File > New Project。在 Categories 选择 C/C++ Development。在 Projects 选择 C/C++ Dynamic Library并单击 Next
  2. Project Name 键入 HelloWorldNative
  3. Project Location 键入与为通用 Java 应用程序项目输入的位置相同的位置需要的值应该已作为默认值存在。
  4. 接收所有其他字段的默认值。

  1. 选中 Set as Main Project 复选框。然后单击 Finish
    IDE
    创建 /HelloWorldNative 项目文件夹。

设定项目属性

  1. 右键单击项目节点从上下文菜单中选择 Properties
  2. 在打开的对话框中导航到 Configuration Properties > C/C++ > GNU C Compiler > General。编辑 Additional Include Libraries 属性值。将它设置为

   /include, /include/linux
这些设置对于实现用 C 代码调用 Java jni.h 库是必要的。

  1. 导航到 Configuration Properties > C/C++ > GNU C Compiler > Command Line。编辑 Additional Options 属性值。将它设置为 -shared -m32
    –shared 选项通知编译器生成一个动态库。
    -m32 通知编译器创建一个 32 位二进制代码。默认情况下,在 64 位系统上编译的二进制代码是 64 位的,这在使用 32 JDK 时会引起很多问题。
  2. 导航到 Configuration Properties > Linker > General。编辑 Output 属性值。将其设置为 dist/HelloWorldNative.so

  这一步的目的是简化所得 SO 文件的路径以使通过 Java 调用它更为简便。


  1. 单击 OK
    保存定义的设置。

添加头文件

  1. 将生成的 /HelloWorldNative.h 头文件复制到 C/C++ Library 项目目录/HelloWorldNative
  2. Projects 视图导航到 HelloWorldNative > Source Files。右键单击 Source Files 节点,从上下文菜单中选择 Add Existing Item。将 IDE 指向 HelloWorldNative.h 文件。
    HelloWorldNative.h 文件出现在 Source Files

实现方法

  1. 右键单击 Source Files 节点从上下文菜单中选择 New > Add Empty C File 属性。在 File Name 中,键入 HelloWorldNative并单击 Finish
    编辑器打开 HelloWorldNative.c 文件。


  1. 键入以下代码,编辑 HelloWorldNative.c 文件:
 
 
 
        #include 
 
        #include 
 
        #include "HelloWorldNative.h"
 
 
 
        JNIEXPORT void JNICALL Java_helloworld_Main_nativePrint
 
            (JNIEnv *env, jobject obj)
 
        {
 
            printf("/nHello World from C/n");
 
        }
 
                    


  1. 右键单击 HelloWorldNative 项目节点,并选择 Build ProjectOutput 对话框显示 Build successfulExit value 0.


小结

在本练习中创建了一个新的 C/C++ 动态库,指定了它的位置并对它进行了配置以便能够构建 Java 方法的 JNI 实现。为在 Java 应用程序中声明的本地方法添加生成的头文件并实现它。

构建并运行应用程序

本练习将完成对应用程序 Java 部分的一些最终更改。这是保证 Java 部分正确加载在前一个练习中编译的本地库所必需的。然后编译并运行最终的应用程序。

配置 Java 项目

  1. 在编辑器中打开 Main.java 文件。
  2. 添加以下初始化代码
 
 
 
        static {
 
            System.load("/HelloWorldNative/dist/HelloWorldNative.so");
 
        }
 
                  

运行应用程序

  1. 右键单击项目节点并从上下文菜单中选择 Set As Main Project HelloWorld Java 项目设置成主项目。
  2. F6 运行应用程序。
    程序应正确执行Output 对话框中应显示
 
 
 
        Hello World from C
 
        BUILD SUCCESSFUL (total time: 0 seconds)
 
                        


小结

本练习完成了一些最终的配置步骤并运行了应用程序以验证本地方法的实现来自本地 C 库。

 

下一步

可以从这里下载本教程的源代码。

可以使用以下文档获得更多信息

l      Getting Started With the NetBeans C/C++ Development PackNetBeans C/C++ Pack 5.5 教程

l      Java Native InterfaceJava Native Interface 5.0 规范

 


原创粉丝点击