美文网首页
clion编译jni,找不到jni.h的解决办法

clion编译jni,找不到jni.h的解决办法

作者: 100个大西瓜 | 来源:发表于2021-12-28 11:41 被阅读0次

    在windows环境下生成的动态库是 dll
    在linux下生成so
    在mac下生成的是dylib
    所以对于Android的开发者来说,还是要用ndk的工具
    把在idea生成的.h文件粘贴到clion的项目中就可以了,
    如果找不到jni.h可以在CMakeList.txt中添加对jni.h文件的引用
    如下:

    cmake_minimum_required(VERSION 3.0)
    project(jni-c C)
    
    set(CMAKE_C_STANDARD 99)
    #add jdk-path
    include_directories(C:/soft/jdk8/include)
    include_directories(C:/soft/jdk8/include/win32)
    include_directories(C:/soft/jdk8/include/win32/bridge)
    

    后面三行根据jdk的实际位置填写,作用是导入jni相关的头文件;其他的操作系统可能不完全一致

    复制.h头文件 com_shenby_jni_JniExample.h

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class com_shenby_jni_JniExample */
    
    #ifndef _Included_com_shenby_jni_JniExample
    #define _Included_com_shenby_jni_JniExample
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     com_shenby_jni_JniExample
     * Method:    getStringFromC
     * Signature: ()Ljava/lang/String;
     */
    JNIEXPORT jstring JNICALL Java_com_shenby_jni_JniExample_getStringFromC
      (JNIEnv *, jobject);
    
    #ifdef __cplusplus
    }
    #endif
    #endif
    
    

    实现该文件定义的函数 com_shenby_jni_JniExample.c

    //
    // Created by shenby on 2021/12/21.
    //
    #include <jni.h>
    #include "com_shenby_jni_JniExample.h"
    
    JNIEXPORT jstring JNICALL Java_com_shenby_jni_JniExample_getStringFromC
            (JNIEnv *env, jobject jobj){
        return (*env)->NewStringUTF(env,"string from c");
    }
    
    

    在CMakeList.txt中添加生成动态共项库

    add_library(hello SHARED com_shenby_jni_JniExample.c)
    

    add_library:生成一个库,add_executable:生成一个可执行文件
    hello:是生成共享库的名字,前面会自动加上lib前缀,如这里windows生成的是 libhello.dll
    SHARED:库的类型为动态,windows上生成.dll,而STATIC 则是生成静态库,windows生成.a文件
    com_shenby_jni_JniExample.c :c源文件,多个文件就添加在后面,切记不能添加上面的com_shenby_jni_JniExample.h
    文件,否则生成的库中的函数为空

    结果如下


    结果

    就可以把该dll文件粘贴到idea的项目根目录中运行了

    相关文章

      网友评论

          本文标题:clion编译jni,找不到jni.h的解决办法

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