java - 如何在 Android 上创建原生 C++ 库?

标签 java android c++ java-native-interface

我需要用 C++ 编写一个动态链接库,供 Java 在 Android 上使用。 据我了解,它应该是 .so 库,但我不知道该怎么做。 我试过 Cygwin,但它崩溃了:

$ gcc 1.cpp

/usr/lib/gcc/i686-pc-cygwin/4.3.4/../../../../i686-pc-cygwin/bin/ld: cannot find -luser32 collect2: ld returned 1 exit status

1.cpp:
int main(int, char**)
{
   return 0;
}

有人可以帮我吗?

P.S.我不擅长*nix,所以最好在Windows下完成

UPD:我已经安装了 Android NDK 和 Cygwin 并将它们添加到 PATH 环境变量

UPD2:感谢您的帮助。问题出在 Cygwin 本身。重新安装它和 NDK 解决了问题。

最佳答案

对于您的示例,使用 g++ 而不是 gcc,它是一个 C++ 程序。

查看 NDK 中的 hello-jni 示例。您需要使用 NDK 构建共享库并将其导入到 Java Android 项目中。在Java代码中,您需要使用'native'声明本地函数并使用static添加库;请参阅下面的代码段。

public native String  stringFromJNI();

static {
    System.loadLibrary("hello-jni");
}

关于java - 如何在 Android 上创建原生 C++ 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3147382/

相关文章:

c++ - 我想获取文件内容并将每一行放入数组项中

c++ - 如何在 C++ 中获取进程的起始地址/基地址?

java - Gradle : How to generate coverage report for Integration test using jacoco

Java SSL -OpenSSL- Snafu

java - JDBI 查询返回 MSSQL datetimeoffset(4) 列的错误值?

android - BluetoothSerial cordova 插件回显写入

java - 如何在 Java 中将 BigDecimal 转换为具有 2 位小数的 float

android - 如何在android中打开链接?

android - 无法检索共享的首选项数据

c++ - 从 std::filesystem::path 中移除点前缀 "./"