android - 获取错误 : undefined reference to function Android NDK

标签 android c++ cmake android-ndk ndk-build

两天多来我一直在尝试解决这个问题,但仍然没有运气。

我不知道哪里出了问题,我只需要设置一个简单的 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)'

这是我的根 CMakeLists

# 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)

在libs目录下

# 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): 'undefined reference to `__android_log_write' when using log api in the second jni library

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

这段代码效果很好

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

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

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

关于android - 获取错误 : undefined reference to function Android NDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47376444/

相关文章:

c++ - ACE_TRACE 宏不工作

python - 使用 Python 虚拟环境时,include 和 libs 在哪里?

CMake install TARGETS 给定的目标不是可执行文件、库或模块

macos - 在Mac上安装CMake命令行工具

java - 如何在 Eclipse 中添加两个按钮,一个用于播放 mp3 文件,另一个用于停止它

java - Libgdx 处理 SVG

android - LG(Android > 2.1)媒体播放器不播放 shoutcast 流

android - 完成工作后如何停止服务?

c++ - 从 XML 中提取特定数字属性的有效方法

c++ - 为什么我们选择 "bounding box"方法来填充一个三角形呢?