设为首页 加入收藏

TOP

使用Javah 生成C/C++头文件
2019-09-03 02:44:43 】 浏览:37
Tags:使用 Javah 生成 C/C 文件

下面举例说明:


使用eclipse建立一个工程假设工程路径为$ProjectPath,并且你已经定义了一个类,并且带包名:cn.com.comit.jni


package cn.com.comit.jni;
 
public class HelloJni {
   
    public native void displayHelloJni();
    static{
        System.loadLibrary("");
    }
 
    /**
    * @param args
    */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new HelloJni().displayHelloJni();
    }
 
}


eclipse会自动帮你编译出一个字节码文件HelloJni.class,路径是$ProjectPath\bin\cn\com\comit\jni,很可能你会先cd到.class的目录这么做:


>cd $ProjectPath\bin\cn\com\comit\jni


>$ProjectPath\bin javah HelloJni


发现执行出错:


错误:无法访问 HelloJni
错误的类文件: .\HelloJni.class
类文件包含错误的类: cn.com.comit.jni.HelloJni
请删除该文件或确保该文件位于正确的类路径子目录中。


看来是路径有问题咯。那改成


javah cn.com.comit.jni.HelloJni


再次运行,发现还是错误:


错误:无法访问 cn.com.comit.jni.HelloJni
未找到 cn.com.comit.jni.HelloJni 的类文件
javadoc: 错误 - 找不到类 cn.com.comit.jni.HelloJni。


怎么才能解决这个问题呢?其实只要cd到包的上一级目录(我们这里是$ProjectPath\bin)在运行下面的命令就搞定了:


 


javah -classpath . cn.com.comit.jni.HelloJni


看一下生成的C头文件:


/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class cn_com_comit_jni_HelloJni */
 
//避免重复包含头文件


#ifndef _Included_cn_com_comit_jni_HelloJni
#define _Included_cn_com_comit_jni_HelloJni


//c++编译环境中才会定义__cplusplus (plus就是"+"的意思


备注:注意路径和空格的问题!


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Angular 8延迟加载路由 下一篇Java DbUtils 操作数据库

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目