2017-06-22 79 views
1

我正尝试使用C文件创建应用程序。Android - 使用JNI生成的C文件

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

要使用这些JNI文件,我创建了一个使用JNI的其他C文件:native-lib.c

所以matlab生成的C文件通过native-lib.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不起作用?您有解决方案来解决我的问题吗?

谢谢!

回答

0

最后,我找到了解决我的问题:

事实上,这是非常简单的:

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}) 

我只是把所有的变量sources_c的C文件与file(GLOB sources_c ...)

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

我希望它能帮上忙!

0

我不熟悉CMake的,不过,你可能想要么添加在src/JNI/include文件夹作为第二个库源和静态链接到本机的lib,或添加的内容src/jni /直接包含add_library(native-lib SHARED ...)的参数。请注意,include_directories用于#include路径而不用于src位置。

+0

是的,我注意到'include_directories'不适用于源路径。所以我想我必须通过'add_library'添加所有的源代码(即使这些文件没有被修改为与JNI一起使用)。 –