【问题标题】:Android - use generated C files with JNIAndroid - 使用 JNI 生成的 C 文件
【发布时间】:2017-06-22 16:06:38
【问题描述】:

我正在尝试使用 C 文件创建应用程序。

实际上,C 文件是从 matlab 生成的(大约 20 个文件,有 .c.h),我没有修改这些文件。

为了将这些文件与 JNI 一起使用,我创建了另一个使用 JNI 的 C 文件:native-lib.c

所以通过native-lib.c使用matlab生成的C文件(这个文件我是用网上找的tuto写的)。

我有这个 c 文件的架构:

src/
-- jni/
---- native-lib.c
---- include/
-------- All the c files generated from matlab

这是native-lib.c(我在这里简化):

#include <jni.h>
#include "include/function1.h"


JNIEXPORT jint JNICALL
My_project_function1(JNIEnv* env, jobject obj, Function1_Args args) {

    int x = function1(args);
    return x;

}

etc...

为了构建 C 库,我使用这个文件:CMakeList.txt

cmake_minimum_required(VERSION 3.4.1)

add_library(native-lib SHARED src/jni/native-lib.c)

include_directories(src/jni/include)

find_library(log-lib log)

target_link_libraries(native-lib ${log-lib})

但是这个文件CMakeList.txt 不起作用!文件夹include/中的所有文件都不包含在项目中(只有native-lib.c被识别)。

所以我想包含include/ 文件夹的文件而不修改它们(不添加JNIEXPORTJNICALL 等...)。

我几乎从不使用 C,对 C 一代一无所知。所以不知道怎么办,网上找到的大部分答案我也看不懂:(

有人明白为什么CMakeList.txt 不起作用吗?你有办法解决我的问题吗?

谢谢!

【问题讨论】:

    标签: android c cmake java-native-interface


    【解决方案1】:

    我不熟悉 CMake,但是,您可能希望将 src/jni/include 文件夹添加为第二个库源和到 native-lib 的静态链接,或者将 src/jni/include 的内容直接添加到add_library(native-lib SHARED ...) 的参数。请注意,include_directories 用于#include 路径,而不用于 src 位置。

    【讨论】:

    • 是的,我注意到include_directories 不适用于源路径。所以我想我必须通过add_library添加所有的源(即使文件没有被修改为与JNI一起使用)。
    【解决方案2】:

    我终于找到了解决问题的方法:

    其实很简单:

    cmake_minimum_required(VERSION 3.4.1)
    
    file(GLOB sources_c
        "src/jni/include/*.h"
        "src/jni/include/*.c"
        "src/jni/native-lib.c"
    )
    
    add_library(native-lib SHARED ${sources_c})
    
    find_library(log-lib log)
    
    target_link_libraries(native-lib ${log-lib})
    

    我只是将所有 C 文件放在变量 sources_cfile(GLOB sources_c ...) 中。

    而且,在CMakeList.txt 中,纯C 文件和JNI-C 文件(C 文件与JNIEXPORT 等...)之间似乎存在任何区别。

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多