美文网首页
JNI基础(2): CMake编译简述

JNI基础(2): CMake编译简述

作者: MemetGhini | 来源:发表于2022-01-09 20:14 被阅读0次

    2.1 C++编译成动态库并调用

    本节内容中会简单介绍JNI默认的CMakeLists.txt文件和相关语法。首先创建一个名为cmakecompile的项目看看CMakeLists.txt文件,内容如下:

    //指定CMake最低版本
    cmake_minimum_required(VERSION 3.18.1)
    //指定项目名称
    project("cmakecompile")
    //把native实现文件编译成一个动态库
    add_library( cmakecompile SHARED native-lib.cpp)
    //把安卓系统中的log日志库找到,并获取其路径
    find_library( log-lib log)
    //找到后连接到本项目中,便于在Native层打印日志
    target_link_libraries( cmakecompile ${log-lib})
    

    在cpp目录下新建一个Person文件夹,里面创建Person.h/Person.cpp。把这个Person类直接追加到 cmakecompile 库中。

    add_library( cmakecompile SHARED native-lib.cpp Person/Person.cpp)
    

    或者新建一个Person动态库,连接到 cmakecompile。

    add_library(person SHARED Person/Person.cpp)
    target_link_libraries(cmakecompile person ${log-lib})
    

    stringFromJNI方法改造为:

    #include <jni.h>
    #include <string>
    #include "Person/Person.h"
    
    extern "C" JNIEXPORT jstring JNICALL Java_com_memetghini_cmakecompile_MainActivity_stringFromJNI( JNIEnv* env, jobject /* this */) {
        Person p;
        p.setName("Kadi");
        return env->NewStringUTF(p.getName().c_str());
    }
    

    注意:Person类的头文件是双引号引入的。双引号是从相对目录搜索,尖括号是从搜索目录搜索。如果想改为#include <Person.h>号可以再cmake加一句头文件搜索目录。

    include_directories(Person)
    

    这样在cmake产物目录中就有了 cmakecompile.so, person.so两个动态库并在jni层实现了调用。

    相关文章

      网友评论

          本文标题:JNI基础(2): CMake编译简述

          本文链接:https://www.haomeiwen.com/subject/qifpcrtx.html