android - CMake 链接可执行文件到共享库(Android Studio 2.2)

标签 android c++ android-ndk cmake

我在新版本的 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()

的 undefined reference

clang++:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

忍者:构建停止:子命令失败。

我希望有人能帮助我:)

最佳答案

Android CMake支持是为Java代码在运行时加载生成共享库;共享库可以调用其他 native 库(共享库或静态库)中的其他函数。不支持您的使用模型:android 不支持 jni 框架中的 native 可执行文件。

关于android - CMake 链接可执行文件到共享库(Android Studio 2.2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39702117/

相关文章:

c++ - 仅专门化模板类的一个方法(的一部分)

Android L Preview 不搜索 "armeabi"文件夹中的原生库(UnsatisfiedLinkError)

android - android-getMenuInflater导致崩溃

Android给一个menuItem添加子菜单,addSubMenu()在哪里?

c++ - 不会为所有 thread_local 对象调用析构函数

android - 为什么我在使用 Android NDK r16 构建项目时收到来自 Android NDK r11 的错误消息?

android - 如何影响 Android/ARM 目标的 Delphi XEx 代码生成?

android - 使用 getSharedPreferences 获取时间

android - android 中的图库图像循环

c++ - PhysX 中的时间步长