java调用C/C++方法 JNA

jnaerator-0.12-shaded工具的使用

1.在当前目录下运行jnaerator-0.12-shaded.jar,需要java环境,可以直接双击运行,如果双击运行不成功则使用命令:java -jar .\jnaerator-0.12-shaded.jar

java调用C/C++方法 JNA_第1张图片

2.运行之后进入启动页面

java调用C/C++方法 JNA_第2张图片

3.操作完之后会在右侧生成java代码,简单的案例可以直接将代码复制出来使用,遇到一些比较复杂的调用直接通过show output导出jar包,然后将jar包导入到项目中使用

java调用C/C++方法 JNA_第3张图片

 show output导出jar包

java调用C/C++方法 JNA_第4张图片

4.使用方法

(1)将jar包放入lib目录下

java调用C/C++方法 JNA_第5张图片

(2)maven中引入jar包 


     Dream
     Dream
     1.0
     system
     ${project.basedir}/src/main/resources/lib/Dream.jar

(3)配置打包方式,否则项目打包的时候,本地jar包部署不进去

   
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    true
                
            
            
                org.apache.maven.plugins
                maven-war-plugin
                2.4
                
                    
                        
                            src/main/resources/jar/
                            WEB-INF/lib/
                            
                                **/*.jar
                            
                        
                    
                
            
        
    

5.java调用.dll或者.so

说明:.dll是在windows下的,直接将需要调用的dll文件放入项目中即可,如放入resource目录下

java调用C/C++方法 JNA_第6张图片

.so文件是在linux环境下的,需要指定.so文件的路径,这里先说明一下 ,否则会遇到这种错误,解决方式在下面

遇到的错误: java.lang.UnsatisfiedLinkError: Unable to load library 'xx' Can't obtain InputStream for linux-x86-64/xx.so

解决方法:这个错误是指找不到so文件。于是我们将so文件所在的目录设置到环境变量LD_LIBRARY_PATH中:

vim /etc/profile

在export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC下面加入

export LD_LIBRARY_PATH=你的so目录

之后,你可以检查一下设置的起没起效果:echo $LD_LIBRARY_PATH,如果出现你设置的内容就对了,如果没有,你可以重新打开一个窗口再查一下

 6.准备工作做好了直接上代码,编写测试方法,非常简单DreamLibrary是在生成jar包里的接口,getFree是其方法,设定其参数即可调用,同样可以将项目部署到linux环境下调用.so,按照上面方法设定so的文件路径就行

import dream.DreamLibrary;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class testController {
    @PostMapping("/test")
    public String test(){
        int c = DreamLibrary.INSTANCE.getFree(5,6);
        System.out.println(c);
        return "ok";
    }
    public static void main(String[] args) {
        System.out.println(DreamLibrary.INSTANCE.getFree(5,6));
    }
}

工具下载传送门:https://download.csdn.net/download/qq_31275085/11150235

你可能感兴趣的:(java)