Linux下 利用Jna调用c程序/so库的相关问题

1. 生成so库问题

  1. 已有c文件如下图
    在这里插入图片描述2
  2. 在利用 cpp或者c 文件生成 so库时,切记将需要接口调用的方法 前加上 extern "C",(如果是dll库的话,这里应为:extern "C" __declspec(dllexport))如下图
    在这里插入图片描述
  3. 在 linux 中,cpp文件的同级目录下,打开终端窗口运行下面命令
    g++ Flow1D.cpp files.cpp -fpic -shared -o libflowd.so
    就会生成so库。

2. java 接口以及路径问题

因为是将项目打包成jar包在Linux服务器上运行,关于路径问题折腾了好久,最终我的是这样的。

  1. 将jar包需要读写的文件放到与jar包的同级目录下,如下图
    在这里插入图片描述
    在DAT中,so文件即为so库,07文件夹中为其他的输入输出文件
    在这里插入图片描述
  2. 编写java类加载动态链接库并写接口
    其中:System.getProperty(“user.dir”) 获取当前jar包所在的绝对路径
    注意:在Linux环境下,路径均为 / ,同时,我是直接通过路径加载了so库,就不需要配置环境变量什么的了。
public interface Clibaray extends Library {
			
		//加载动态链接库
		Clibaray INSTANCE = (Clibaray)Native.loadLibrary(
				System.getProperty("user.dir")+(Platform.isWindows()?"/DAT/flowd.dll":"/DAT/libflowd.so"),Clibaray.class);
		//对应库中的接口方法,注意参数的对应关系:java和c语言
		void test1(String path);
			
			
	}
  1. 把jar包和 DAT文件一起复制到Linux中,运行就可以了

参考:
JNA调用C++的相关点总结
Maven学习笔记(十二)-maven打包之resource配置
关于在打包Jar文件时遇到的资源路径问题(二)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值