树莓派Pico使用std::this_thread::sleep_for遇链接错误的解决
树莓派Pico中
std::this_thread::sleep_for链接错误的修复方案 问题背景
在树莓派Pico项目中使用std::this_thread::sleep_for(10ms);后,触发链接错误,提示usleep和sleep符号未定义。尝试自定义usleep函数但不确定正确签名,纠结是要修复标准库睡眠函数的链接问题,还是只能全部替换为Pico SDK自带的sleep_us/sleep_ms。
可行修复方案
无需替换现有std::this_thread::sleep_for代码,只需添加以下适配代码,让标准库调用Pico SDK的睡眠接口:
#include <unistd.h> #include "pico/time.h" // 适配标准库依赖的usleep函数 int usleep(useconds_t usec) { sleep_us(usec); return 0; } // 适配标准库依赖的sleep函数 unsigned int sleep(unsigned int sec) { sleep_ms(sec * 1000); return 0; }
将这段代码添加到项目任意源文件(比如main.cpp或单独的适配文件),重新编译即可解决链接错误。
完整构建输出示例
[100%] Built target pico-sdk
[100%] Building CXX object CMakeFiles/demo_project.dir/src/main.cpp.obj
[100%] Linking CXX executable demo_project.elf
Memory region Used Size Region Size %age Used
FLASH: 18704 B 2 MB 0.90%
RAM: 2328 B 256 KB 0.89%
[100%] Built target demo_project
内容的提问来源于stack exchange,提问作者David Carpenter
相关产品推荐
相关产品推荐

