当前位置: 首页 > 知识库问答 >
问题:

使用Android Studio NDK的“未定义引用”函数

姚宪
2023-03-14

我有3个类,native-lib.cpp、tracker.cpp和tracker.hpp,但是,在构建过程中,如果我在navive-lib.cpp中使用tracker.cpp中的isTracking函数,我会得到一个错误。

>

  • 错误:任务“:app:ExternalNativeBuildDebug”执行失败。

    生成命令失败。执行进程/home/user/android/sdk/cmake/3.6.4111459/bin/cmake时出错,带有参数{--build/home/user/androidstudioProjects/project/app/.externalnativeBuild/cmake/debug/x86-target tracker}[1/2]构建CXX对象cmakefiles/tracker.dir/src/main/cpp/native-lib.cpp.o[2/2]链接CXX共享库linux-x86_64/bin/clang++--target=i686-none-linux-android=/home/user/android/sdk/ndk-bundle/toolchains/x86-4.9/prebuilt/linux-x86_64--sysroot=/home/user/android/sdk/ndk-bundle/sysroot-fpic-isystem/home/user/android/sdk/ndk-bundle/sysroot/usr/include/i686-linux-android-d__android-api_=-tables-fstack-protector-strong-no-canonical-prefixes-mstackrealign-wa,--noexecstack-wformat-werror=format-security-o0-fno-limit-debug-info-wl,--exclude-libs,libgcc.a,--sysroot/home/user/android/sdk/ndk-bundle/platforms/android-23/arch-x86-wl,--build-id-wl,--warn-shared-textrel-wl,--fatal-warnings-wl,--no-undefined-wl,-z,noexecstack-qunused-arguments-wl,-z,noexecstack-qunused-arguments-wl,-z,relro-wl,-z,no-shared-wl,-soname,libtracker.so-o.../.../.../.../main/cpp/native-lib.cpp.o/home/user/android/sdk/ndk-bundle/platforms/android-23/arch-x86/usr/lib/liblog.so................................./src/main/jnilibs/x86/libopencv_java3.so-lm“/home/”Tracker::Istracking()“Clang++:

    set (pathToOpenCv /home/user/OpenCV-android-sdk3.2) set (pathToProject /home/user/AndroidStudioProjects/project)
    
    cmake_minimum_required(VERSION 3.4.1)
    
    set(CMAKE_VERBOSE_MAKEFILE on)
    
    include_directories(${pathToOpenCv}/sdk/native/jni/include)
    
    FILE(GLOB_RECURSE cppfiles "/home/user/AndroidStudioProjects/project/app/src/main/cpp/*.cpp")
    
    add_library(lib_opencv SHARED IMPORTED)
    
    add_library(tracker SHARED ${cppfiles})
    
    set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION ${pathToProject}/app/src/main/jniLibs/${ANDROID_ABI}/libopencv_java3.so)
    
    find_library( log-lib
    
                  log ) target_link_libraries(
                           tracker
    
                           ${log-lib}
    
                           lib_opencv
                           )
    

    这是我的母语-lib.cpp

    #include <jni.h>
    #include <string>
    #include "tracker.hpp"
    
    using namespace cv;
    
    Tracker tracker;
    
    extern "C"
    JNIEXPORT jboolean JNICALL
    Java_com_example_user_project_Tracker_isTrackingC(JNIEnv *env, jboolean boolean) {
        boolean = tracker.isTracking();
        return boolean;
    }
    

    为什么CMake不能从原生库中的tracker.cpp中找到我的函数?我想我是通过使用cmakelists中的add_library(跟踪器共享${cppfiles})和target_link_libraries将所有的cpp链接在一起的。

  • 共有1个答案

    裴心水
    2023-03-14

    “链接CXX共享库../../../../////build/intermediates/cmake/debug/obj/x86/libtracker.so failed”这是关键点。“--target=i686-none-linux-Android”也许您的项目编译工具链应该使用32bit

     类似资料:
    • 问题内容: 我正在使用Linux,并且具有以下文件: 该函数在中声明和定义。我需要在中使用该函数,因此我将该函数声明为 在。 但是,在编译过程中,我得到了错误 怎么了? 谢谢。 预计到达时间:多亏了我收到的答案,我现在有了以下内容: 在fileA.h中,我有 在fileA.c中,我有 在fileB.h中,我有 在fileB.cpp中,我有 但是,我现在有错误 问题答案: 如果您确实是使用C而不是C

    • 问题内容: 我正在尝试在操作系统上设置libusb API。我在libusb.org上下载了libusb api。我遵循了标准的安装过程: 然后,我启动了Eclipse C / C ++,并从Internet上的教程中复制了一些代码。但是当尝试构建它时,我得到以下输出: 我在/ lib中有libusb.so,在/ usr / local / include中也有usb.h,在/ usr / loc

    • 我终于绝望了。所以,在我的c课上,我们被指示使用类。我们会让头文件声明类和函数,而另一个单独的. cpp文件实现它。事情应该是有效的,但他们没有,网上没有解决方案似乎对我有用。为此,我在linux上使用了G编译器,它似乎在IDE或普通命令行上都无法工作。 我在笔记本上看到的错误。h是这样的: 我有点不喜欢该文件没有接收任何电话类的方法。下面是TBook的代码。h: 这就是TBook.cpp的样子:

    • 但是,我一定遗漏了什么,因为在构建项目时,我得到了一个关于OpenCL函数的未定义引用错误。这是完整的错误:任务“:App:ExternalNativeBuildArm8Debug”执行失败。 你知道我错过了什么吗?在过去的两天里,我搜索了几个小时关于如何在Android Studio中设置OpenCL的问题,但我找到的所有东西似乎都过时了,似乎对我的问题不起作用。

    • 问题内容: 我正在尝试为网站添加 自定义表情的用户脚本 。但是,我遇到了很多错误。 这是函数: 该标签的调用该函数: 每次单击具有属性的按钮时,都会出现此错误: 未捕获ReferenceError:函数未定义。 任何帮助,将不胜感激。 谢谢! 我尝试使用: 但是我有一个错误。 这是脚本。 我试图这样做来测试听众是否正常工作,但他们不适合我: 问题答案: 切勿使用或用户脚本中的类似属性!在常规网页中

    • 我正在尝试为一个网站做一个用户脚本来添加自定义的表情。然而,我已经得到了很多错误。 函数如下: 标记的调用此函数: 每次单击具有属性的按钮时,都会出现以下错误: 未捕获得ReferenceError:未定义函数. 我尝试使用: 但我得到一个错误。 这是剧本。 我试着这样做来测试监听器是否对我有效,而它们对我无效: