2016-09-26 36 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框架中不支持本机可执行文件。