我在新版Android Studio中创建了一个小型测试项目来测试新的c ++支持。
我尝试从共享库中调用函数。该函数位于另一个.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();
};
test2.cpp文件:
#include "test2.h"
int Test::getArea(){
return side*side;
}
我的native-lib.cpp文件的一部分:
JNIEXPORT jstring JNICALL
.....(JNIEnv *env,jobject instance){
Test *test = new Test();
test->getArea();
.
.
.
我得到这些错误:错误: 未定义引用' Test :: getArea()
clang ++:错误:链接器命令失败,退出代码为1(使用-v查看调用)
忍者:构建已停止:子命令失败。
我希望有人可以帮助我:)。
答案 0 :(得分:1)
Android CMake支持生成用于在运行时加载的Java代码的共享库;共享库可以调用其他本机库中的其他函数(共享或静态)。您的使用模型不受支持:android不支持jni框架中的本机可执行文件。
答案 1 :(得分:0)
您似乎正在尝试测试您的本机代码。一种可行的方法是使用 googletest 套件(https://cmake.org/cmake/help/v3.10/module/GoogleTest.html)进行JNI测试。
以下是有关Google测试的github参考:https://github.com/google/googletest/blob/master/googletest/README.md