我正在尝试使用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/
文件夹的文件而不修改它们(不添加JNIEXPORT
,JNICALL
等等。)
我几乎从不使用C,我对C代一无所知。所以我不知道该怎么做,而且我不理解网上发现的大多数答案:(
有人理解为什么CMakeList.txt
不起作用?你有解决方案来解决我的问题吗?
谢谢!
答案 0 :(得分:0)
我不熟悉CMake,但是,你可能想要将src / jni / include文件夹添加为第二个库源和静态链接到native-lib,或者直接添加src / jni / include的内容add_library的参数(native-lib SHARED ...)。请注意,include_directories用于#include路径,而不用于src位置。
答案 1 :(得分: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})
我只是将所有C文件放在变量sources_c
中file(GLOB sources_c ...)
。
并且,在CMakeList.txt
中,似乎纯C文件和JNI-C文件(带有JNIEXPORT
的C文件,等等...)之间存在任何区别。
我希望它会有所帮助!