You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

链接CompactNSearch库时遇构造函数未定义引用错误求助

编译CompactNSearch时出现未定义引用错误的解决方法

问题描述

使用CompactNSearch库时,编译阶段出现未解决的链接错误,耗时数小时未修复。

最小可复现示例(MWE)

目录结构

克隆库后的目录结构如下:

├── CMakeLists.txt
├── CompactNSearch 
...
└── main.cpp

main.cpp代码

#include "CompactNSearch.h"
using namespace CompactNSearch;

int main()
{
    float r = 0;
    NeighborhoodSearch nsearch(r);
}

CMakeLists.txt代码

cmake_minimum_required(VERSION 3.22)

project(MyProject VERSION 1.0
                  LANGUAGES CXX)

add_executable(
    MyProject main.cpp
)

add_subdirectory(CompactNSearch)
target_link_libraries(MyProject CompactNSearch)

操作步骤

mkdir build
cd build
cmake ..
make

编译报错信息

[ 16%] Building CXX object CompactNSearch/CMakeFiles/CompactNSearch.dir/src/CompactNSearch.cpp.o
[ 33%] Linking CXX static library libCompactNSearch.a
[ 33%] Built target CompactNSearch
[ 50%] Building CXX object CMakeFiles/MyProject.dir/main.cpp.o
[ 66%] Linking CXX executable MyProject
/usr/bin/ld: CMakeFiles/MyProject.dir/main.cpp.o: in function `main':
main.cpp:(.text+0x44): undefined reference to `CompactNSearch::NeighborhoodSearch::NeighborhoodSearch(float, bool)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/MyProject.dir/build.make:100: MyProject] Error 1
make[1]: *** [CMakeFiles/Makefile2:117: CMakeFiles/MyProject.dir/all] Error 2
make: *** [Makefile:136: all] Error 2

已尝试的解决方法

  • 尝试多种CMake链接库的写法
  • 分别将库编译为静态/共享库后再链接,结果一致
  • 在构造函数定义中添加#error This should be shown,确认该代码已被编译

解决方案

问题根源是CompactNSearch库通过编译flag控制精度类型(float/double),默认启用double精度,与代码中传入float参数的构造函数不匹配。修改CMakeLists.txt,在引入子目录前添加精度控制flag即可解决:

cmake_minimum_required(VERSION 3.22)

project(MyProject VERSION 1.0
                  LANGUAGES CXX)

# 强制使用float精度,匹配代码中的参数类型
set(USE_DOUBLE_PRECISION OFF)

add_executable(
    MyProject main.cpp
)

add_subdirectory(CompactNSearch)
target_link_libraries(MyProject CompactNSearch)

内容的提问来源于stack exchange,提问作者Hakka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:35:25