如何在安卓系统上创建本地C++库?

8
我需要用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 返回1退出状态
1.cpp:
int main(int, char**)
{
   return 0;
}

有人能帮我吗?

附言:我不擅长*nix,所以最好在Windows下完成

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

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

3个回答

2

针对您的例子,使用g++而不是gcc,因为这是一个C++程序。

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

public native String  stringFromJNI();

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

1

在Android上编译和链接本地库,您可能需要使用Android NDK。Cygwin和Windows应该可以工作(Cygwin提供所需的*nix工具)。

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

这里有一篇文章可能会有所帮助。它涵盖了android-ndk/cygwin部分,并应提供更多信息的指针。

编辑

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

这是最有希望的链接:http://www.cygwin.com/ml/cygwin/2003-01/msg00292.html

基本上 - 运行Cygwin安装程序并添加包含user32库的软件包。然后它应该可以工作。

好的,我之前在Windows上使用了带有C ++ .dll-s的JNI,但是我在基于Android的设备上做同样的事情时遇到了一些问题。 这里提供代码仅用于澄清,我知道如何编写JNI库:) 根据该消息,似乎我的Cygwin环境配置不正确。 - UnknownGosu

0

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

是的,在Windows下完全可行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接