【问题标题】:undefined reference native library in AndroidAndroid中未定义的参考本机库
【发布时间】:2017-03-17 13:35:44
【问题描述】:

我正在为 Android 开发一个需要一个小型 c 库的应用程序。这个 C 库是使用 SDK 工具中包含的 GCMake 编译的。我使用 JNI 函数来连接 java 和 C。

这是 jni 文件 (jni_wrapper.c)

#include <jni.h>
#include "check.h"

JNIEXPORT void JNICALL Java_package_ui_fragments_menu_WeatherFragment_checkData( JNIEnv* env, jobject instance,
    jobject data) {

    checkData(data);
}

我的 check.h 文件

typedef struct {
    char *date;
    char *query;
} Data;

void checkData(Data* data);

我的 check.c 文件

#include <stdio.h>
#include <getopt.h>
#include <stdlib.h>
.... More imports


void checkData(Data* data) {
    //implementation
}

目录结构

<root>/app/src/main/checkdata/
                      jni_wrapper.c
                      check.c
                      check.h
                      other_file_dependent_check.c
                      other_file_dependent_check.c

我的 CMakeLists.txt

project(checkdata)

add_library(checkdata SHARED
           jni_wrapper.c)

target_link_libraries(checkdata
                  android
                  log)

我的 build.gradle 文件(gradle 插件版本 2.2.2)

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    externalNativeBuild {
        cmake {
            path "src/main/checkdata/CMakeLists.txt"
        }
    }

FAILURE:构建失败并出现异常。

  • 出了什么问题: 任务 ':app:externalNativeBuildDebug' 执行失败。

    构建命令失败。 使用参数执行“/Users/adrian/Library/Android/sdk/cmake/3.6.3155560/bin/cmake”时出错{--build /App/path/app/.externalNativeBuild/cmake/debug/mips64 --target checkdata } [1/2] 构建C对象CMakeFiles/checkdata.dir/jni_wrapper.c.o [2/2] 链接C共享库/Users/adrian/Documents/devel/App/path/app/build/intermediates/cmake/debug/obj/mips64/libcheckdata.so 失败: : && /Users/bob/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang -target mips64el-none-linux-android -gcc-toolchain /Users/bob/库/Android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/darwin-x86_64 --sysroot=/Users/bob/Library/Android/sdk/ndk-bundle/platforms/android-21/ arch-mips64 -fPIC -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -g -DANDROID -ffunction-部分 -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -O0 -fno-limit-debug-info -O0 -fno-limit-debug- info -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,- z,relro -Wl,-z,now -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--no-undefined -Wl,-z, noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-s oname,libcheckdata.so -o /App/path/app/build/intermediates/cmake/debug/obj/mips64/libcheckdata.so CMakeFiles/checkdata.dir/jni_wrapper.c.o -landroid -llog -lm && : CMakeFiles/checkdata.dir/jni_wrapper.c.o:在函数Java_package_ui_fragments_menu_WeatherFragment_checkData': /Users/bob/Documents/devel/App/path/src/main/checkdata/jni_wrapper.c:7: undefined reference tocheckData' clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) ninja:构建停止:子命令失败。

我需要有关错误 /Users/bob/Documents/devel/App/path/src/main/checkdata/jni_wrapper.c:7: undefined reference to `checkData' 的帮助

【问题讨论】:

  • 为什么check.c 没有在add_library() 中列出?

标签: java android c android-ndk java-native-interface


【解决方案1】:

add_library(Checkdata check.c)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 2017-05-14
    • 2013-05-27
    • 1970-01-01
    • 2011-12-08
    • 2013-01-16
    • 1970-01-01
    相关资源
    最近更新 更多