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

CLion Arduino项目编译报undefined reference错误求助

解决CLion Arduino项目编译"undefined reference"错误的方案

兄弟,你的问题太典型了——CMakeLists.txt里没把Hello.cpp添加到编译列表里!

Arduino IDE会自动扫描sketch目录下的所有.cpp、.h文件,但CLion用的Arduino CMake工具链不会自动做这件事,你得手动把所有需要编译的源文件都明确告诉CMake。

具体修改步骤:

  1. 在CMakeLists.txt里定义一个变量,把所有要编译的源文件都列进去(包括你的.ino和.cpp文件)
  2. 把原来指定单个.ino文件的代码替换成这个变量

修改后的完整CMakeLists.txt如下:

cmake_minimum_required(VERSION 2.8.4)
set(CMAKE_TOOLCHAIN_FILE ${CMAKE_SOURCE_DIR}/cmake/ArduinoToolchain.cmake)
set(PROJECT_NAME Sample)
project(${PROJECT_NAME})

# 把所有需要编译的源文件都放在这里
set(SAMPLE_SOURCES
    src/Sample.ino
    src/Hello.cpp
)

# 用这个变量替代原来的单文件设置
set(${CMAKE_PROJECT_NAME}_SKETCH ${SAMPLE_SOURCES})

include_directories(include)
include_directories(src)

set(${CMAKE_PROJECT_NAME}_BOARD mega)
set(${CMAKE_PROJECT_NAME}_PORT /dev/ttyACM0)
set(mega.build.mcu atmega2560)
# set(mega.upload.protocol wiring)
set(mega.upload.speed 115200)

generate_arduino_firmware(${CMAKE_PROJECT_NAME})

为什么这样能解决问题?

generate_arduino_firmware这个CMake函数只会编译你通过${PROJECT_NAME}_SKETCH指定的文件,你之前只给了Sample.ino,所以Hello.cpp压根没被编译,链接器自然找不到Hello::world()的实现,就报了"undefined reference"错误。

以后再添加新的.cpp文件,记得把它们也加到SAMPLE_SOURCES变量里,不然还会遇到同样的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:41:04