获取错误:未定义对函数 Android NDK 的引用

Getting error: undefined reference to function Android NDK

本文关键字:Android NDK 引用 函数 取错误 未定义 获取      更新时间:2023-10-16

我已经尝试解决这个问题两天多了,但仍然没有运气。

我不知道出了什么问题,我只需要设置一个简单的 NDK 项目,但它已经花费了大量的时间。

问题是我得到了

error: undefined reference to 'firpm(unsigned int, std::vector<double, std::allocator<double> > const&, std::vector<double, std::allocator<double> > const&, std::vector<double, std::allocator<double> > const&, double, int)'

这是我的根CMake列表

# Cmake Minimum Version
cmake_minimum_required(VERSION 3.4.1)
project(EcgProcessing)
# Add nested cmake files
include(libs/CMakeLists.txt)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
# ECG Audio Processor library
add_library(ecg-signal-processor-demodulator SHARED
            demodulator.cpp)
add_library(ecg-signal-processor-qrsdetection SHARED
            qrsdetection.cpp)
# Link
target_link_libraries(
            firpm_d
            log
            android
            ecg-signal-processor-demodulator
            ecg-signal-processor-qrsdetection)

在库目录中

# Cmake Minimum Version
cmake_minimum_required(VERSION 3.4.1)
set(LIBS_DIRECTORY ${CMAKE_CURRENT_LIST_DIR})
#include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Eigen/)
MACRO(ADD_SUBLIB libname source_ext)
  #Compute required sources
  set(sublib_path "${LIBS_DIRECTORY}/${libname}")
  file(GLOB_RECURSE sublib_sources "${sublib_path}/src/*.${source_ext}")
  #Create library
  IF( sublib_sources )
    ADD_LIBRARY(${libname} SHARED ${sublib_sources})
  ENDIF()
  #add this library's header folder to the global include set
  INCLUDE_DIRECTORIES("${sublib_path}/include")
  INCLUDE_DIRECTORIES("${sublib_path}/")
  link_directories(${sublib_path})
ENDMACRO(ADD_SUBLIB)
ADD_SUBLIB(firpm_d "cpp")
ADD_SUBLIB(eigen "cpp")

它开始编译项目,但最终出现错误。

什么

会导致此错误,我不知道该尝试什么。

这是源代码,所以你可以看到它都是结构化的。https://github.com/DurianOdour/EcgProcessor

我将不胜感激任何帮助

我已经找到了解决方案。在这里

Android ndk(cmake(:在第二个 jni 库中使用日志 API 时对 '__android_log_write' 的未定义引用

问题在于链接库的顺序不正确。

这段代码效果很好

# Link
target_link_libraries(
            ecg-signal-processor
            log
            android
            firpm_d)

第一个参数应该是需要依赖项的库。

target_link_libraries(<target> [item1 [item2 [...]]]
                      [[debug|optimized|general] <item>] ...)