如何解决使用 C 代码时 Android NDK/JNI 未定义对函数的引用
我在使用 Android Studio NDK/JNI 构建 c 代码时遇到问题。 我基本上想要实现的是,运行被拆分为多个头文件和源文件的 c 代码。为了得到一个易于理解的例子,我想实现什么,我在这里使用了简单的 c 代码,它执行加法 (Add.c) 和 c 代码,它调用具有定义值的“add”-Function (getNumber 。C)。我想使用 JNI 来简单地调用 getNumber.c 中的 getNumber() 函数。每次我尝试构建代码时,我都会在 calc-lib.c 中收到错误:
错误:未定义对“getNumber()”的引用
在 cpp 文件夹中,我有标准的“native-lib.cpp”。 我添加了我的源文件 Add.c 和 getNumber.c 以及相应的头文件:
添加.c
#include "Add.h"
#include <stdlib.h>
#include <stdio.h>
int addition(int x,int y){
return x+y;
}
添加.h
#ifndef APPLICATION_Add_H
#define APPLICATION_Add_H
int addition(int x,int y);
#endif //APPLICATION_Add_H
getNumber.c
#include "Add.h"
#include "getNumber.h"
#include <stdlib.h>
#include <stdio.h>
int getNumber(void){
return addition(5,5);
}
getNumber.h
#ifndef MY_APPLICATION_GETNUMBER_H
#define MY_APPLICATION_GETNUMBER_H
int getNumber(void);
#endif //MY_APPLICATION_GETNUMBER_H
JNI 的对应文件 calc-lib.c:
#include <jni.h>
#include "getNumber.h"
jint Java_com_example_myapplication_MainActivity_getNumber(JNIEnv* env,jobject obj) {
return getNumber();
}
和 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 3.10.2)
project("myapplication")
add_library( # Sets the name of the library.
native-lib
SHARED
native-lib.cpp
)
add_library( # Sets the name of the library.
calc-lib
SHARED
calc-lib.c
getNumber.c
Add.c
)
find_library( # Sets the name of the path variable.
log-lib
log )
target_link_libraries(
native-lib
${log-lib} )
target_link_libraries(
calc-lib
Add
getNumber
${log-lib} )
我已经尝试寻找解决方案并得出结论,这很可能是链接问题。我尝试修改 native-lib.cpp 文件,而不是使用单独的 calc-lib.c 文件来调用 getNumber() 函数。我也尝试了提到 here 和 here
的解决方案如果有人知道我做错了什么,我将非常感谢您的帮助。
问候
vki
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。