当前位置: 代码迷 >> java >> 如何在Android上创建本机C ++库?
  详细解决方案

如何在Android上创建本机C ++库?

热度:54   发布时间:2023-07-31 11:04:09.0

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

$ gcc 1.cpp

/usr/lib/gcc/i686-pc-cygwin/4.3.4/../../../../i686-pc-cygwin/bin/ld:找不到-luser32 collect2:ld返回1退出状态

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

有人可以帮我吗?

PS我不擅长* 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");
}

您可能需要Android NDK才能在Android上编译和链接本机库。 Cygwin和Windows应该可以工作(cygwin提供了必需的* nix工具)。

在我看来,您为WINTEL环境编译了c ++源代码,这与android手机完全不同。 因此,如果您将该库加载到手机,它肯定会崩溃/根本无法工作。

它涵盖了android-ndk / cygwin部分,并应提供一些指向更多信息的指针。

编辑

将错误消息的叹息部分发送给google,并惊讶于user32 lib没有任何结果...然后我意识到, -luser32部分有效地从结果列表中删除了所有与user32相关的链接;)

这是最有前途的链接: :

基本-运行cygwin安装程序并添加包含user32 lib的软件包。 然后它应该工作。

查看NDK随附的示例。 您需要使用JNI绑定以使其与Java通信。 在这些绑定下,您可以执行任何您想做的事情,但是需要从Java访问的任何事情都需要通过JNI绑定。 任何不需要访问的内容都可以像平时一样编写。

是的,它在Windows下完全可行。

  相关解决方案