rop2040编译出错记录

/tmp/arduino/sketches/2D79E9117D9D13C4A4A6DC41AD1CF7A4/sketch/main.cpp.o: In function `blink_program_init(pio_hw_t*, unsigned int, unsigned int, unsigned int)': /home/lvguangjie/Arduino/rp2040/sketch_jan14b/blink.pio.h:45: multiple definition of `blink_program_init(pio_hw_t*, unsigned int, unsigned int, unsigned int)' /tmp/arduino/sketches/2D79E9117D9D13C4A4A6DC41AD1CF7A4/sketch/clock_out.cpp.o:/home/lvguangjie/Arduino/rp2040/sketch_jan14b/blink.pio.h:45: first defined here collect2: error: ld returned 1 exit status

错误信息提示的是链接器(ld)在尝试创建最终的可执行文件时遇到了问题,具体是blink_program_init函数在多个地方被定义了。在你的编译输出中,blink_program_init函数在main.cpp.oclock_out.cpp.o两个对象文件中都有定义,这通常是由于以下原因之一:

  1. 头文件中的定义blink_program_init函数可能在头文件blink.pio.h中被定义,并且这个头文件被多个源文件(如main.cppclock_out.cpp)包含。在C++中,你应该只在头文件中声明函数,而在单个源文件中定义它。

  2. 多次包含 :如果blink.pio.h被同一个源文件多次包含,而你又没有使用包含守卫(也称为头文件保护),这也可能导致函数被多次定义。

  3. 条件编译错误:可能存在条件编译的错误,使得同一个函数在不同的条件下被多次定义。

为了解决这个问题,你可以:

  • 确保blink_program_init函数只在一个源文件中定义,如main.cppclock_out.cpp
  • 如果需要在头文件中提供函数原型,请确保你使用的是函数声明而不是定义。例如:

|---|----------------------------------------------------------------------------------------------------------------|
| | // blink.pio.h |
| | extern "C" void blink_program_init(pio_hw_t* hw, unsigned int sm, unsigned int pin_base, unsigned int freq); |

然后在某个源文件中提供定义:

复制代码

|---|------------------------------------------------------------------------------------------------------------------|
| | // main.cpp 或 clock_out.cpp |
| | extern "C" void blink_program_init(pio_hw_t* hw, unsigned int sm, unsigned int pin_base, unsigned int freq) { |
| | // 函数实现 |
| | } |

  • 使用包含守卫来防止头文件被多次包含。例如:

    复制代码

    |---|-------------------------|
    | | // blink.pio.h |
    | | #ifndef BLINK_PIO_H |
    | | #define BLINK_PIO_H |
    | | |
    | | // 头文件内容 |
    | | |
    | | #endif // BLINK_PIO_H |

已解决,在另一个文件中重复定义blink_program_init函数。

相关推荐
小短腿的代码世界17 小时前
从.qrc到rcc编译器:Qt资源系统的隐秘运作机制与大型项目性能突围
开发语言·qt
2401_8332693018 小时前
Java网络编程入门
java·开发语言
青瓦梦滋18 小时前
C++的IO流与STL的空间配置器
开发语言·c++
五月君_18 小时前
Bun v1.3.14 发布,Rust 版即将进 Claude Code 内测,下一版可能就告别 Zig
开发语言·后端·rust
鱼很腾apoc19 小时前
【学习篇】第20期 超详解 C++ 多态:从语法规则到底层原理
java·c语言·开发语言·c++·学习·算法·青少年编程
不吃土豆的马铃薯20 小时前
4.SGI STL 二级空间配置器 allocate 与_S_refill 源码解析
c语言·开发语言·c++·dreamweaver·内存池
码界筑梦坊21 小时前
120-基于Python的食品营养特征数据可视化分析系统
开发语言·python·信息可视化·数据分析·毕业设计·echarts·fastapi
lsx20240621 小时前
《Foundation 模态框》
开发语言
fufu031121 小时前
vscode配置C/C++环境,用GDB调试简单程序分享
开发语言·c++
快乐江湖21 小时前
「层层包装」—— 装饰器模式
开发语言·python·装饰器模式