Springboot项目在Linux环境下调用SO库

1、首先,准备服务部署环境,这里将Springboot项目打包jar部署到Linux服务器上,Linux需要安装C环境用来生成SO文件。

        Linux安装C语言环境

[root@localhost ~]# sudo yum groupinstall "Development Tools"

        检查版本信息

[root@localhost ~]# gcc -v

2、接下来,在开发工具上编写C文件,这里用到一个.h头文件和一个.c文件

        .h头文件,类似于java中的接口,定义方法

        

#include "stdio.h"
int add(int a ,int b);

        .c文件,实现.h文件定义的方法,注意方法名、返回类型、参数一致。

#include"add.h"
int add(int a , int b){
    int c;
    c=a+b;
    return c;
}

   

 3、将这两个文件传送到Linux服务器上,进行编译成.SO库,SO库命名是lib加上.c文件的名字,如:add.c文件编译后是libadd.so。/home/jenkins/usr/local/jdk1.8是Linux的JAVA环境变量,根据自己的环境目录路径进行配置。

[root@localhost local]# gcc -shared -I /home/jenkins/usr/local/jdk1.8/include -I /home/jenkins/usr/local/jdk1.8/include/linux  add.c -o libadd.so

4、将生成的libadd.so复制到/usr/lib/目录下, 这里也可以自己配置调用SO库系统环境路径。

        

[root@localhost local]# cp libadd.so /usr/lib/

5、创建一个Springboot项目,引用JNA的pom依赖,JNA框架是JNI的封装,调用简单。

       

 <!--jna调用so库-->
       <dependency>
           <groupId>net.java.dev.jna</groupId>
           <artifactId>jna</artifactId>
           <version>5.5.0</version>
        </dependency>

6、创建一个CLibrary接口,实现Library类,定义add.h头文件的方法,注意方法的名字、参数、返回类型要一致。

package com.test.demo.CLibraryInterface;
import com.sun.jna.Library;

public interface CLibrary extends Library {
    int add(int x ,int y);
}

7、接下来,在service层需要调用SO库中的方法时,用Native.load("add",CLibrary.class)方法实现接口CLibrary,通过CLibrary直接调用SO库中的方法。


@Service
public class AddServiceImpl implements AddService {
    CLibrary INSTANCE = (CLibrary) Native.load("add",CLibrary.class);

    @Override
    public int add(int x, int y) {
        int add = INSTANCE.add(x, y);
        return add;
    }

}

8、通过Controller层调用service层来调用这个方法

@RestController
public class AddController {
    @Autowired
    private AddService addService;

    @RequestMapping("add")
    public String getAdd(){
        int add = addService.add(1, 5);
        return ""+add;
    }
}

9、修改application.properties配置文件,将server.address修改成Linux服务器地址,因为要在Linux上启动。

server.port=8954                  //端口号
server.address=192.168.159.155     //服务器地址
spring.application.name=testAdd   //服务名字

10、将项目打包jar,放在Linux服务器上,到jar包目录下通过Java -jar jar包名 启动服务。

[root@localhost jar]# java -jar demo-0.0.1-SNAPSHOT.jar 

11、这里用的是虚拟机Linux,还要配置NAT做一个端口的转发,用于访问Linux上的服务。

 

 11、最后,我们通过访问:ip地址+端口号+方法名 就可以访问了。

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值