链接可执行到共享库(Android Studio 2.2)

CMake Link Executable to shared library (Android Studio 2.2)

本文关键字:Android Studio 可执行 共享 链接      更新时间:2023-10-16

我在新版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查看调用)

ninja: build stopped: subcommand failed.

我希望有人能帮助我:)

Android CMake支持生成Java代码在运行时加载的共享库;共享库可以调用其他本地库(共享或静态)中的其他函数。android不支持jni框架中的本机可执行文件

看起来您正在尝试测试您的本机代码。一种可行的方法是使用googletest suite (https://cmake.org/cmake/help/v3.10/module/GoogleTest.html)进行JNI测试。

这里是关于google测试的github参考:https://github.com/google/googletest/blob/master/googletest/README.md