前言
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

总结
- 这里的举例并没有用到我们之前写的代码,是因为要稍微麻烦一些,具体实践中,示例中的代码可以写在springboot项目中,并最后打包成jar文件,这样就可以解决依赖的问题
- 这里主要演示SO文件的生成,以及加载SO文件需要注意的问题
本文介绍了如何在Windows环境中使用Docker创建Linux容器,安装必要的工具,如GCC,以及如何将Windows开发的动态库打包为Linux支持的SO文件。还涉及了JNA库的使用和依赖处理,以在Linux容器中运行Java应用。
3852

被折叠的 条评论
为什么被折叠?



