經過這些論壇的徹底搜索,並無法找到相關的答案;我決定問你,我的問題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