南郭平 发表于 2025-12-11 16:48:21

怎么调用自己编写的so函数

我在老机器上用工具ndkr21e r命令行的方式编译so文件libtest.so
请问我在火山移动怎么调用

// test.cpp
#include <cmath>
#include <cstring>

// 告诉编译器:这些函数使用 C 链接方式(避免 C++ 名称修饰)
extern "C" {

// 1. 整数相加
int add(int a, int b) {
    return a + b;
}

// 2. 计算圆的面积(输入半径)
float circle_area(float radius) {
    return 3.1415926535f * radius * radius;
}

// 3. 判断是否为素数
int is_prime(int n) {
    if (n < 2) return 0;
    for (int i = 2; i * i <= n; ++i) {
      if (n % i == 0) return 0;
    }
    return 1;
}

// 4. 字符串反转(注意:修改传入的字符串)
void reverse_string(char* str) {
    if (!str) return;
    int len = strlen(str);
    for (int i = 0; i < len / 2; ++i) {
      char temp = str;
      str = str;
      str = temp;
    }
}

// 5. 计算斐波那契数列第 n 项(非递归,高效)
long long fib(int n) {
    if (n <= 1) return n;
    long long a = 0, b = 1, c;
    for (int i = 2; i <= n; ++i) {
      c = a + b;
      a = b;
      b = c;
    }
    return b;
}

} // extern "C"


创世魂 发表于 2025-12-11 18:27:24

https://bbs.voldp.com/thread-2213-1-1.html这里有个简单的例子。要知道so库里面的包名,知道后就能封了。

南郭平 发表于 2025-12-12 13:22:26

// 文件名: math.c
#include <jni.h>// 必须包含 jni.h

// 函数名格式: Java_包名_类名_方法名
// 注意:包名中的 . 要换成 _
JNIEXPORT jint JNICALL
Java_com_example_myapp_MathUtils_add(JNIEnv *env, jobject thiz, jint a, jint b) {
    return a + b;
}
调用成功感谢你提供的例子
页: [1]
查看完整版本: 怎么调用自己编写的so函数