问题描述
我需要用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解决了该问题。
1楼
对于您的示例,使用g ++而不是gcc(它是C ++程序)。
查看NDK中的hello-jni示例。 您需要使用NDK构建共享库,并将其导入Java Android项目。 在Java代码中,您需要使用'native'声明本机函数,并使用static添加库。 请参阅下面的代码段。
public native String stringFromJNI();
static {
System.loadLibrary("hello-jni");
}
2楼
您可能需要Android NDK才能在Android上编译和链接本机库。 Cygwin和Windows应该可以工作(cygwin提供了必需的* nix工具)。
在我看来,您为WINTEL环境编译了c ++源代码,这与android手机完全不同。 因此,如果您将该库加载到手机,它肯定会崩溃/根本无法工作。
。 它涵盖了android-ndk / cygwin部分,并应提供一些指向更多信息的指针。
编辑
将错误消息的叹息部分发送给google,并惊讶于user32 lib没有任何结果...然后我意识到, -luser32
部分有效地从结果列表中删除了所有与user32
相关的链接;)
这是最有前途的链接: :
基本-运行cygwin安装程序并添加包含user32 lib的软件包。 然后它应该工作。
3楼
查看NDK随附的示例。 您需要使用JNI绑定以使其与Java通信。 在这些绑定下,您可以执行任何您想做的事情,但是需要从Java访问的任何事情都需要通过JNI绑定。 任何不需要访问的内容都可以像平时一样编写。
是的,它在Windows下完全可行。