JNI:对<somevars>的未定义引用

时间:2018-10-12 16:12:25

标签: java c java-native-interface

我检查并尝试了其他主题,但没有一个真正有用。我也是JNI的新手。因此,

我有一个C文件来解析XML,并以字符串形式返回0/1。而且我有一个CMake可以编译(假定为).so文件,因此我可以在Android中使用它。因此JNI可以提供帮助。解析器C文件如下所示:

JNIEXPORT jint JNICALL
Java_my_package_name_my_module_parse_config(JNIEnv *env, jobject obj) {
    xmlNodePtr root = 0, i = 0;
    xmlChar *xc = 0;
    ph_str config;
    ph_str config_dtd = {DEVICE_CONFIG_DTD, strlen(DEVICE_CONFIG_DTD)};

    if (!(root = module_config_sanity_check(config, config_dtd, "my_module"))) {
        goto error;
    }

error:
if (xc)
    xmlFree(xc);
if (root && root->doc) xml_free(root->doc);
return (0); }

而CMake有这个:

set(modSRCs config.c)
set(modHDRs config.h)
add_library(parser_module SHARED ${modSRCs} ${modHDRs})

构建它时,出现如下错误:

    Error while executing process /opt/android/cmake/3.6.4111459/bin/cmake 
    with arguments {--build 
 /opt/android/myApp/app/.externalNativeBuild/cmake/debug/x86_64 --target module}
[1/2] Building C object CMakeFiles/module.dir/app/modules/config.c.o
[2/2] Linking C shared library /opt/android/myApp/app/build/intermediates/cmake/debug/obj/x86_64/moduele.so
FAILED: : && /opt/android/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang  --target=x86_64-none-linux-android21 --gcc-toolchain=/opt/android/ndk-bundle/toolchains/x86_64-4.9/prebuilt/linux-x86_64 --sysroot=/opt/android/ndk-bundle/sysroot -fPIC -isystem /opt/android/ndk-bundle/sysroot/usr/include/x86_64-linux-android -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security  -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a -nostdlib++ --sysroot /opt/android/ndk-bundle/platforms/android-21/arch-x86_64 -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -L/opt/android/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86_64 -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,ue_android.so -o /opt/android/MyApp/app/build/intermediates/cmake/debug/obj/x86_64/ue_android.so CMakeFiles/ue_android.dir/phoenix/modules/ue_android/config.c.o  -lbase -latomic -lm && :
/opt/android/ndk-bundle/toolchains/x86_64-4.9/prebuilt/linux-x86_64/lib/gcc/x86_64-linux-android/4.9.x/../../../../x86_64-linux-android/bin/ld: error: cannot find -lbase
**/opt/android/MyApp/app/src/main/cpp/my_module/config.c:41: error: undefined reference to 'module_config_sanity_check'**

我也尝试过返回(* env)-> GetString(env,myString),但没有帮助。我是否也应该用JNI包装module_config_sanity_check函数?

任何想法应该在哪里修复?

0 个答案:

没有答案