经过这些论坛的彻底搜索,并无法找到相关的答案;我决定问你,我的问题StackOverflow友善的人。C++ JNI互操作性
我现在有3(C++)库:
StaticLib(含有纯虚拟接口和 “C” 风格原型)
DynamicLibLinux(含有Linux实现上述原型的)
DynamicLibAndroid(不知道该把什么放在这里)
问题是,我不想改变StaticLib的代码是:
struct IObject {
virtual ~IObject() {}
virtual void foo() = 0;
};
extern "C" {
IObject* CreateObject();
}
的DynamicLibLinux包含
#include <IObject.h>
class Object : public IObject {
public:
virtual ~Object() {}
virtual void foo() {
//do something incredibly useful here...
}
};
#ifdef __cplusplus
extern "C" {
#endif
IObject* CreateObject() {
return new Object;
}
#ifdef __cplusplus
}
#endif
之后,在我的Linux独立,我可以调用的dlsym( “libDynamicLibLinux.so”)函数来加载我的CreateObject函数。这一切都像一个魅力。现在,事情就是这样:我想在Android应用程序中使用静态库。我无法弄清楚如何在JNI中实现这一点。到目前为止,我有这样的事情:
#include <IObject.h>
#include <jni.h>
class Object : public IObject {
... same as above
};
#ifdef ...
JNIEXPORT IObject* JNICALL CreateObject(JNIEnv*) {
return new Object;
}
这将很明显,没有工作,因为执行不匹配的声明。所以我的问题归结为:
有什么办法可以使用C + +静态库“原样”与JNI?
亲切的问候,并感谢您对您的耐心,
Emiel
编辑: 在此期间,我已经发现了一些有前途的:javacpp。有没有人有使用这个库的经验?
你们是不是要调用由C++的Java或C++与Java? – Eric 2013-02-21 23:28:00
我不知道它是否会帮助你,但我做了一个关于使用jni的教程。 http://julien-dumortier.fr/android-ndk-faire-du-c-avec-android/ 请原谅我的英语。也许我不明白这个问题! – 2013-02-22 00:16:57
我正试图从Java调用C++。 – user2097260 2013-02-22 00:52:31