2016-09-26 37 views
1

我在新版Android Studio中創建了一個小測試項目來測試新的C++支持。CMake Link可執行到共享庫(Android Studio 2.2)

我嘗試從共享庫調用一個函數。該功能是在其他.cpp文件

這裏是我的CMakeLists.txt文件的一部分:

add_library(JNI SHARED src/main/cpp/native-lib.cpp) 
add_executable(testex src/main/cpp/test2.cpp) 
INCLUDE_DIRECTORIES (src/main/cpp) 
target_link_libraries(testex JNI) 

的test2.h文件:

class Test{ 
public: 
     int side; 
     intgetArea(); 
}; 

的測試2.cpp文件:

#include "test2.h" 
int Test::getArea(){ 
      return side*side; 
} 

我的母語lib.cpp文件的一部分:

JNIEXPORT jstring JNICALL 
.....(JNIEnv *env,jobject instance){ 
Test *test = new Test(); 
test->getArea(); 
. 
. 
. 

我得到這些錯誤:錯誤: 未定義參考「測試::的getArea()

鐺++:錯誤:連接命令,退出代碼1失敗(使用-v看到調用)

忍者:建立停止:子命令失敗。

我希望有人能幫助我:)

+0

你應該考慮考慮庫如何工作。你的test2.cpp被編譯進你的可執行文件中。那麼你不能在庫中使用它。 – Hayt

回答

1

的Android CMake的支持是生成Java代碼共享庫在運行時加載;共享庫可以調用其他本地庫中的其他函數(共享或靜態)。您的使用模式不受支持:android在jni框架中不支持本機可執行文件。