栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

springboot 调用 c++生成的so库文件(解决方法无法访问,和参数异常)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot 调用 c++生成的so库文件(解决方法无法访问,和参数异常)

一、创建c文件 SoTest.h
#pragma once
class SoTest
{
	int Add(int a,int b);
};
SoTest.cpp
#include "SoTest.h"

int SoTest::Add(int a, int b) {
	return a + b;
}
二、配置

项目 -> 属性 -> 常规

三、创建so文件

这个远程服务器在ubuntu下,生成的so在该路径下

四、查看方法名称(重要,解决找不到方法问题)

查看so文件内的方法,方法经过编译后需要查看方法名,方法名可能在编译后产生变化,原因未知,直接用Add方法名可能不能找到方法

nm -D libSoTest.so |grep T

五、java代码(重要,解决参数错乱问题)
public class SOTest {
    public interface SoTest extends Library {
        static SoTest INSTANCE = Native.load("/home/ubuntu/projects/SoTest/bin/x64/Debug/libSoTest.so", SoTest.class);

        int _ZN6SoTest3AddEii(String x, int a, int b);         // c方法
    }


    public int add(int a, int b) {
        return SoTest.INSTANCE._ZN6SoTest3AddEii("", a, b);
    }

}

方法内多了一个参数x,这个是因为调用时有一个参数被消耗了,这里随意传递都行,后续的a和b可以被方法正确接收处理,原因未知
猜测可能类似于java -jar ***.jar ,第一个参数被用作调用参数消耗了,所以多传递一个参数,也可能是类似于main函数的命令函参数消耗了一个参数

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934285.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号