ld returned 1 exit status ninja: build stopped: subcommand failed.
🚨 错误信息
/home/SENSETIME/liming3/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/14.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/nubo_data_provider/libnubo_data_provider.a(Data_User.cpp.obj):(.literal._ZN9senseauto13data_provider9Data_User24jsonKeysToColumnNameListERNSt7__cxx114listINS2_12basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EEE+0x0): undefined reference to `_ZN9senseauto13data_provider9Data_User18JsonKey_ColumnNameERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_'
/home/SENSETIME/liming3/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/14.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/nubo_data_provider/libnubo_data_provider.a(Data_User.cpp.obj): in function `_ZN9senseauto13data_provider9Data_User19JsonKeyToColumnNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE':
/data/gerrit/workspace_NuBo_repo/IC_NuBo_DataProvider/components/nubo_data_provider/src/relational/data/Data_User.cpp:301:(.text._ZN9senseauto13data_provider9Data_User24jsonKeysToColumnNameListERNSt7__cxx114listINS2_12basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EEE+0x32): undefined reference to `_ZN9senseauto13data_provider9Data_User18JsonKey_ColumnNameERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_'
/home/SENSETIME/liming3/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/14.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/nubo_data_provider/libnubo_data_provider.a(Data_User.cpp.obj): in function `_ZN9senseauto13data_provider9Data_User19ColumnNameToJsonKeyERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE':
/data/gerrit/workspace_NuBo_repo/IC_NuBo_DataProvider/components/nubo_data_provider/src/relational/data/Data_User.cpp:250:(.text._ZN9senseauto13data_provider9Data_User19ColumnNameToJsonKeyERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x12): undefined reference to `_ZN9senseauto13data_provider9Data_User18JsonKey_ColumnNameERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
🤖 AI解决方案
/home/SENSETIME/liming3/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/14.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/nubo_data_provider/libnubo_data_provider.a(Data_User.cpp.obj):(.literal._ZN9senseauto13data_provider9Data_User24jsonKeysToColumnNameListERNSt7__cxx114listINS2_12basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EEE+0x0): undefined reference to `_ZN9senseauto13data_provider9Data_User18JsonKey_ColumnNameERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_'
# 核心关键句翻译:
# "esp-idf/nubo_data_provider/libnubo_data_provider.a(Data_User.cpp.obj) 中的某个函数尝试引用未定义的符号 '_ZN9senseauto13data_provider9Data_User18JsonKey_ColumnNameERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_'"
#
# /home/SENSETIME/liming3/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/14.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/nubo_data_provider/libnubo_data_provider.a(Data_User.cpp.obj): in function `_ZN9senseauto13data_provider9Data_User19JsonKeyToColumnNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE':
# /data/gerrit/workspace_NuBo_repo/IC_NuBo_DataProvider/components/nubo_data_provider/src/relational/data/Data_User.cpp:301:(.text._ZN9senseauto13data_provider9Data_User24jsonKeysToColumnNameListERNSt7__cxx114listINS2_12basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EEE+0x32): undefined reference to `_ZN9senseauto13data_provider9Data_User18JsonKey_ColumnNameERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_'
# # 核心关键句翻译:
# # "在 Data_User.cpp 的第301行,函数 '_ZN9senseauto13data_provider9Data_User24jsonKeysToColumnNameListERNSt7__cxx114listINS2_12basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EEE' 中,无法找到对符号 '_ZN9senseauto13data_provider9Data_User18JsonKey_ColumnNameERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_' 的定义。"
#
# /home/SENSETIME/liming3/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/14.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/nubo_data_provider/libnubo_data_provider.a(Data_User.cpp.obj): in function `_ZN9senseauto13data_provider9Data_User19ColumnNameToJsonKeyERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE':
# /data/gerrit/workspace_NuBo_repo/IC_NuBo_DataProvider/components/nubo_data_provider/src/relational/data/Data_User.cpp:250:(.text._ZN9senseauto13data_provider9Data_User19ColumnNameToJsonKeyERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x12): undefined reference to `_ZN9senseauto13data_provider9Data_User18JsonKey_ColumnNameERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_'
# # 核心关键句翻译:
# # "在 Data_User.cpp 的第250行,函数 '_ZN9senseauto13data_provider9Data_User19ColumnNameToJsonKeyERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE' 中,无法找到对符号 '_ZN9senseauto13data_provider9Data_User18JsonKey_ColumnNameERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_' 的定义。"
#
# collect2: error: ld returned 1 exit status
# ninja: build stopped: subcommand failed.
原因分析
链接器(ld)在链接 libnubo_data_provider.a 库时,找不到符号 _ZN9senseauto13data_provider9Data_User18JsonKey_ColumnNameERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ 的定义。这通常意味着:
- 函数定义丢失:
_ZN9senseauto13data_provider9Data_User18JsonKey_ColumnName函数的实现不在任何被链接的库或源文件中。 - 编译/链接顺序问题:该函数所在的源文件可能未被正确编译或链接到最终的可执行文件。
- ABI 不匹配:尽管不太可能,但如果存在编译器版本或 ABI 相关的差异,也可能导致符号解析失败。
- 确认函数实现:
- 检查构建系统配置:
解决方案
* 在
nubo_data_provider 组件的源代码中,找到 Data_User 类中定义 JsonKey_ColumnName 方法(或对应的 C++ 裸函数)的源文件(很可能是 .cpp 文件)。* 确保该方法被正确实现,并且其可见性(例如,非
static,非匿名命名空间)允许被外部链接。
* 确认
Data_User.cpp 文件(或包含 JsonKey_ColumnName 实现的文件)已经被添加到 nubo_data_provider 组件的 CMakeLists.txt(或对应的构建脚本)中,并被编译。* 检查
CMakeLists.txt 是否正确地将 nubo_data_provider 库添加到项目的链接目标中。
示例(CMakeLists.txt 片段):
# 假设你的源文件是 Data_User.cpp
set(COMPONENT_SRCS
src/relational/data/Data_User.cpp
# ... 其他源文件
)
# 假设你的类是 Data_User
set(COMPONENT_CXX_SOURCES ${COMPONENT_SRCS})
register_component(
NAME nubo_data_provider
SRCS ${COMPONENT_CXX_SOURCES}
# ... 其他选项
)
# 确保该组件被链接
target_link_libraries(app PRIVATE nubo_data_provider)
* 删除构建目录(例如
build 文件夹)。* 重新运行 CMake 配置和构建命令(例如
idf.py fullclean all)。
预防措施
static 关键字时,要特别注意函数和类的名称可能被 mangling(名称修饰)成不易识别的形式,链接器依赖于这些修饰后的名称。nubo_data_provider)都能独立编译成功,并且其公共接口得到充分测试,这样可以及早发现链接问题。