javah命令详解「建议收藏」

javah命令详解「建议收藏」概述:最近在写c++/c的一个小的项目,需要打成动态库,供java使用。就对java调用c++/c代码做了简答了解,在此做记录。jni开发第一步,就是用javah命令生成生成c\c++头文件。javah命令参数详解cmd(默认配置jdkpath)执行javah-help如下图:-d和-o这两个参数用于设置生成的C\C++头文件的指定,该两参数选项不能同时使…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

概述:

最近在写c++/c的一个小的项目,需要打成动态库,供java使用。就对java 调用c++/c代码做了简答了解,在此做记录。jni开发第一步,就是用javah命令生成生成c\c++头文件。

javah命令参数详解

cmd(默认配置jdk path) 执行javah -help 如下图:
这里写图片描述

-d 和-o
这两个参数用于设置生成的C\C++头文件的指定,该两参数选项不能同时使用,-d是为中的每个有JNI方法的java类都生成一个头文件,并存放在-d指定的目录中,-o则是生成的所有JNI方法的头文件都放在-o指定的文件中。
-jin
表示用于生成JNI风格的C\C++头文件,默认该参数就是开启的。
-classpath
 使用-classpath后JDK将不再使用CLASSPATH中的类搜索路径,如果-classpath和CLASSPATH都没有设置,则JDK使用当前路径(.)作为类搜索路径。
  推荐使用-classpath来定义JDK要搜索的类路径,而不要使用环境变量CLASSPATH的搜索路径,以减少多个项目同时使用CLASSPATH时存在的潜在冲突。例如应用1要使用a1.0.jar中的类G,应用2要使用 a2.0.jar中的类G,a2.0.jar是a1.0.jar的升级包,当a1.0.jar,a2.0.jar都在CLASSPATH中,JDK搜索到第一个包中的类G时就停止搜索,如果应用1应用2的虚拟机都从CLASSPATH中搜索,就会有一个应用得不到正确版本的类G。
-verbose
该参数,将显示javah命令搜索和装置类文件的详细过程。

例子1

新建一个含有native方法的java类:

public class HelloWorld{

    static {

        System.load("D://jni//h//hello//x64//Debug//hello.dll");//载入dll Connector.dll

        //D:\jni\h\hello\x64\Debug
    }
    public static void main(String args []){

        HelloWorld helloWord = new HelloWorld();
        helloWord.sayHello("nihao");

    }
    public  native void sayHello(String name);

}

切换到HelloWorld.java所在目录,执行javac HelloWorld.java命令 在本目录会生成HelloWorld.class文件
执行javah -o .\myjni -classpath .\ -jni HelloWorld** 会在当前目录生成名字为myjni.h头文件
执行javah -d .\jni -classpath .\ -jni HelloWorld 会在当前目录新建一个jni目录,并在jni目录生成一个HelloWorld.h头文件

这里写图片描述
注意一定是在HelloWorld.java所在目录执行以上命令

这里写图片描述
例子2:
1、D:\jni\helloWorld目录 创建src目录,并创建com\wei子目录。
2、D:\jni\helloWorld\src\com\wei创建HelloWorld.java Test.java。
HelloWorld.java

package com.wei;
public class HelloWorld { 
   

    public native String getHelloString();
}

Test.java

package com.wei;
public class Test{ 
   
    public native String TestJni();
}

3、在D:\jni\HelloWorld目录新建一个src.txt文本描述,和一个myClass空目录,打开cmd命令,并切换到D:\jni\helloWorld目录,执行 javac命令
这里写图片描述
src.txt

src\com\wei\HelloWorld.java
src\com\wei\Test.java

执行命令后会在myClass目录生成com\wei\ HelloWorld.class Test.class
这里写图片描述
4、在D:\jni\HelloWorld目录新建一个myClass.txt有关类文本描述,打开cmd命令,并切换到D:\jni\helloWorld目录,执行 javah命令
myClass.txt

com.wei.HelloWorld
com.wei.Test

这里写图片描述
执行命令后会在./jni 目录生成以上两个类的头文件。
这里写图片描述

到此我相信大家再也不会为生成jni头文件而不知所措了,下一篇我会整理一下,在android studio上生成头文件的方法。

希望对您有所帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/189698.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • printwriter用法_stylewriter使用教程

    printwriter用法_stylewriter使用教程OutPutStream可以被封装成PrintWriter,OutputStream比较底层一些,是以字节为单位传输的,而PrintWriter是以字符为单位输出,所以就会涉及到转码编码的问题,如果用PrintWriter发送char[]和byte[],在服务端收到的常常是有一些字符会失真.PrintWriter以字符为单位,支持汉字,OutPutStream则不行总结:处理

  • SCSA 模拟题 知识点 (一)

    SCSA 模拟题 知识点 (一)SCSA模拟题知识点(一)1、CIA三原则基本是安全业界的主流共识,CIA原则是:完整性、可用性、机密性2、【AC】关于流量管理功能说法正确的是:流控可以基于用户进行流控3、【AC】数据包如果经过二层交换机转发后,这个数据包的源MAC不会发生变化,如果经过三层交换机路由转发后,源MAC会发生变化4、【SSL】私有用户同一时间只允许一台PC使用;共有用户允许多人使用,在同一时间内同时登录SSLVPN;私有用户可以在线修改登录密码、DKEY的PIN码、手机号码等5、【EDR】病毒..

  • vmware15激活码【永久激活】「建议收藏」

    (vmware15激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~MLZPB5EL5Q-eyJsaWNlbnNlSWQiOi…

  • toast弹窗什么意思_app加弹窗软件

    toast弹窗什么意思_app加弹窗软件//界面toast提示/*使用方法Toast(‘这是一个弹框’,2000)*/functionToast(msg,duration){ duration=isNaN(duration)?3000:duration; varm=document.createElement(‘div’); m.innerHTML=msg; m.style.cssText=…

  • lock html路径,lockworkstation

    lock html路径,lockworkstation电脑找不到rundll32.exeuser32.dll,LockWorkStatio想要在人离开的时候锁定电脑,可是找不到路径怎么办?已经创建的快捷方注意不要拼写错了,是rundll32.exeuser32.dll,LockWorkStation不是LockWordStation。也要注意空格和大小写。实在不行可以用记事本写入DimWSHShellSetWSHShell=WScript….

  • dnf钓鱼网站不小心点开了_dnf易语言源码

    dnf钓鱼网站不小心点开了_dnf易语言源码其实本人当时也没注意很多。就按下了“点此充值”注意!这个所谓的登录根本不是TX的登录,其实就是用一个表单将你的帐号和密码发给盗号的!当你打完帐号密码后按下那个“登录”按钮,你的帐号密码已经到了盗号的手里,不过,他们还差一步,才能将你的号彻底洗干净,那就是你的绑定手机和手机令牌、二级密码。好吧,草了个蛋,这是个.net的页面。继续,当你打完你的号码以后不按“登录”,好吧,我解释一下,因为盗号的人不需…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号