#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文件内的方法,方法经过编译后需要查看方法名,方法名可能在编译后产生变化,原因未知,直接用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函数的命令函参数消耗了一个参数



