Ubuntu 14.04 Eclipse JNI环境搭建(一)之生成JNI头文件

来源:互联网 发布:c语言 map 编辑:程序博客网 时间:2024/06/05 11:43

软件环境

  • ubuntu 14.04
  • eclipse for Java
  • CDT

创建Java工程

       

     创建一个空Java工程,并建立HelloJni.java类。编写好HelloJni.java类后,需要通过javah命令生成头文件(HelloJni.h)。

生成头文件

     根据*.java类生成对应的JNI头文件*.h,需要使用Java的javah命令,首先我们要检查是否JDK已经安装,javah命令是否存在?

    

     使用“which javah”或“whereis javah”命令查询javah文件的安装目录,如果JDK已经正确安装,会打印出javah的安装目录。比如我的电脑显示的就是“/usr/bin/javah”,其实呢,如果你使用资源管理器打开这个目录,会发现这里的javah文件只是一个超链接,真实的指向位置是“/usr/lib/jvm/java-7-openjdk-amd64/bin”。

     如果“which javah”或“whereis javah”命令没有返回任何信息,则说明JDK还没有安装好,请安装JDK。

     简单的执行javac或javah等java命令就知道JDK有没安装配置好:

    

     如果没有安装JDK,会在执行java命令时提示你那些软件中包含该java指令,以及如何安装。比如此处,我是根据提示并选择安装openjdk-7-jdk。

     JDK安装好后,接下来就是需要配置eclipse的编译环境,可以在eclipse中调用javah命令生成头文件。

eclipse外部工具配置

     点击如下图中eclipse按钮:

     ,注意点击该图标右侧的三角形,在弹出菜单中,选择“External Tools Configuration...”,弹出以下截图:

    

      双击左栏的“Program”一项,会创建一个子项目,并按如下图中填写的信息参考填写:

     

      第一项:Name。即编译程序名字,可以随意写,但是既然我们配置的就是运行javah命令,所以直接命名为javah好了。

      第二项:Location。即javah文件所在的目录,可以通过“which javah”命令查看。

      第三项:Working Directory。即编译*.java文件所生成的.class文件存放在哪一个目录,${project_loc}表示编译的java文件所属的工程位置。

      第四项:Argument。运行编译命令时附加的参数,目的是在当前工程下的jni目录下生成与java文件同名的.h头文件。

      配置好后,点击“Apply”按钮保存设置,就可以选择java文件,并点击运行按钮运行了,如下图,注意是刚刚我们配置好的那个按钮,如果你把鼠标放在该按钮上(注意不是三角形)就会提示你“Run javah”,点击这个按钮。

      点击“Run javah”按钮后,鼠标点击工程,按F5键刷新工程列表,如果运行成功,会创建jni文件夹,并在该文件夹下创建了头文件。如果运行失败,会提示诸如上图中红色字的内容:“错误: 找不到 'HelloJni' 的类文件。”意思是找不到HelloJni的class文件。我们知道.class文件一般是在工程下的bin目录下的,我们去该目录下面看一下,发现:

      

     运行javah后,生成的类文件在工程下的bin\classes\下,而刚刚我们配置的External Tools Configuration中的“Working Directory:”的内容是${project_loc}/bin/,即编译后的类文件是在工程的bin/目录下,而实际生成的类文件在bin\classes\文件夹下,所以eclipse才会报错说找不到类文件。问题找到了,解决起来就简单了,把   External Tools Configuration中的“Working Directory:”的内容设置为${project_loc}/bin/classes即可。

     如果运行javah时提示:

    

     大意是变量引用了空白选项:${project_loc},但是${project_loc}时eclipse的自带配置变量,怎么可能为空呢,所以肯定是工程出现了问题,或脏数据导致的。所以要clean一下该项目工程。选中该项目工程,点击eclipse菜单“Project——Clean...”,在弹出框中选择清洗所有项目,或者清洗当前项目:

    

    

     清除成功后,再次选中HelloJni.java,执行“Run javah”,就可以执行成功了,如下图:

    



0 0
原创粉丝点击