JNA(十七)Linux环境SO文件生成与校验

本文介绍了如何在Windows环境中使用Docker创建Linux容器,安装必要的工具,如GCC,以及如何将Windows开发的动态库打包为Linux支持的SO文件。还涉及了JNA库的使用和依赖处理,以在Linux容器中运行Java应用。

前言

Java应用大多数都是部署到Linux环境的,所以windows中开发的动态库最终要打包成linux支持的SO文件,最后在linux中运行


一、docker安装linux容器

1. Docker Destktop安装(请自行安装,有云环境或虚拟机这步无需处理)

2. 创建容器,这里用centos举例(有云环境或虚拟机这步无需处理)

docker pull centos:centos7

3. 更新软件包

yum update

4. 安装开发工具集

yum groupinstall "Development Tools"

5. 查看GCC版本

gcc --version

在这里插入图片描述

二、linux中打包SO文件

1.windows命令行执行下面命令把文件上传至服务器上,centos应该是容器名(非docker容器按对应的方式上传)

docker cp D:\CLion_WS\CDynamicDemo\library.h centos:/home/
docker cp D:\CLion_WS\CDynamicDemo\library.c centos:/home/

在这里插入图片描述

2. 生成SO文件

  • 先编译
gcc -c -fPIC -std=c99 library.c -o libCDynamicDemo.o

在这里插入图片描述

  • 再链接
 gcc -shared -o libCDynamicDemo.so libCDynamicDemo.o

在这里插入图片描述

3.验证

  • 安装JDK
yum install java-1.8.0-openjdk -y
yum install java-1.8.0-openjdk-devel -y
  • 在/home目录下创建PrintCaller.java文件,内容如下
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

public class PrintCaller {
    public interface CLibrary extends Library{
        CLibrary INSTANCE = Native.load(Platform.isWindows() ? "libCDynamicDemo": "CDynamicDemo", CLibrary.class);

        void hello();
    }

    public static void main(String[] args) {
        CLibrary.INSTANCE.hello();
    }
}
  • 执行javac命令
javac PrintCaller.java
  • 在执行java命令之前,有依赖需要处理,我们的程序依赖
    在这里插入图片描述
    所以要把这两个jar复制到jre的ext目录下
    不知道jre的目录,可以先找tools.jar在哪里,然后就能找到jre的目录了
find / -name "tools.jar"

在这里插入图片描述

  • 复制过去后,执行java命令
java PrintCaller

在这里插入图片描述

总结

  1. 这里的举例并没有用到我们之前写的代码,是因为要稍微麻烦一些,具体实践中,示例中的代码可以写在springboot项目中,并最后打包成jar文件,这样就可以解决依赖的问题
  2. 这里主要演示SO文件的生成,以及加载SO文件需要注意的问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值