• Java调用本地接口


    先从一个经典例子说起,Java如何调用本地接口。

    步骤如下:

    1.创建HelloWorld.java

    1. class HelloWorld   
    2. {  
    3.     static{  
    4.         System.loadLibrary("HelloWorld");  
    5.     }  
    6.       
    7.     public native void myprint();  
    8.   
    9.     public static void main(String[] args)   
    10.     {  
    11.         new HelloWorld().myprint();  
    12.     }  
    13. }  

    2.编译生成Class文件HelloWorld

    1. >javac HelloWorld.java  

    3.生成文件头HelloWorld.h

    1. >javah -jni HelloWorld  

    4.C语言编写本地方法HelloWorld.c

    1. #include "HelloWorld.h"  
    2.   
    3. JNIEXPORT void JNICALL  
    4. Java_HelloWorld_myprint(JNIEnv *env,jobject obj){  
    5.     printf("Hello World ! ");  
    6.     return;  
    7. }  

    5.编译本地C方法生成类库dll文件或者so文件

    1. >gcc -Wl,--add-stdcall-alias -shared -Ic:javajdk1.6include -Ic:javajdk1.6includewin32 -o HelloWorld.dll HelloWorld.c  
    1. 或者:  
    2. >cl -Ic:Javajdk1.6include -Ic:Javajdk1.6includewin32 -LD HelloWorld.c -FeHelloWorld.dll  
    1. 如果没有c的编译环境需要安装编译环境或者gcc 参数:-I接目录位置,中间无需空格  
    1. ★关键 dll文件需要存放到 jdk的bin目录或者system32下面  

    6.测试HelloWorld

    1. >java HelloWorld  
    2.   
    3. Hello World !  

             这个经典小例子一般在命令行下面没有什么问题,容易出错的地方就是dll 存放位置不对。运行的时候无法加载dll。

    常见错误:

           1. java.lang.UnsatisfiedLinkError: no HelloWorld in java.library.path

           2. Exception in thread "main" java.lang.UnsatisfiedLinkError: xxx.xxx.HelloWorld.myprint()V

           网上总结很多。错误1,主要是没有办法path路径中加载。错误2主要是没有myprint方法,类库加载没有问题。

           排除dll本身问题(网上不少人遇到),dll没有问题,加载路径也没有问题,不能连接到方法。这个在命令行的时候不容易发现问题,移到生产环境中容易出现,可能你已经猜到了,HelloWorld.java包路径,类的包路径要和生成头文件类包路径一致

           http://www.360doc.com/content/09/0402/09/107226_2994393.shtml

  • 相关阅读:
    python基础1.0
    时间紧的跟狗一样,不动摇坚持下去!
    STM32(十三)- SDIO_SD读写测试
    STM32(十二)- TIM基本定时器和高级定时器
    STM32(十一)- 串行FLASH文件系统FatFs
    STM32(十)- SPI
    STM32(九)- I2C
    STM32(八)- DMA和常用存储器
    STM32(七)- UART
    STM32(六)- SysTick
  • 原文地址:https://www.cnblogs.com/xunbu7/p/3894278.html
Copyright © 2020-2023  润新知