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

RPi Pico使用LWIP实现TCP/IP时缺失sys_arch.h文件求助

解决RPi Pico使用LWIP时找不到arch/sys_arch.h的编译错误

错误信息

In file included from /home/src/pico/pico-extras/lib/lwip/src/core/init.c:42:
/home/src/pico/pico-extras/lib/lwip/src/include/lwip/sys.h:95:10: fatal error: arch/sys_arch.h: No such file or directory

问题原因

直接链接原生lwip库会绕过Pico针对RP2040的LWIP架构适配层,导致编译器找不到RP2040专属的sys_arch.h头文件;同时手动配置的include目录遗漏了架构相关路径。

修正后的CMakeLists.txt

cmake_minimum_required( VERSION 3.13 )

include( $ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake )
include( $ENV{PICO_EXTRAS_PATH}/external/pico_extras_import.cmake )

project( ds3231 C CXX ASM )
set( CMAKE_C_STANDARD 11 )
set( CMAKE_CXX_STANDARD 17 )
pico_sdk_init( )

set( SOURCES src/ds3231.cpp )
add_executable( ${CMAKE_PROJECT_NAME} ${SOURCES} )

pico_enable_stdio_usb( ${CMAKE_PROJECT_NAME} 1 )
pico_enable_stdio_uart( ${CMAKE_PROJECT_NAME} 0 )
pico_add_extra_outputs( ${CMAKE_PROJECT_NAME} )

# 保留项目自身和第三方库的include路径,移除手动添加的LWIP路径(由组件自动处理)
include_directories( /home/src/pico/ds3231/src
                     /home/src/pico/picolib/include )

# 给WIFI参数添加引号,避免带空格的SSID/密码导致编译错误
target_compile_definitions( ${CMAKE_PROJECT_NAME} PRIVATE 
    WIFI_SSID="${WIFI_SSID}"
    WIFI_PASSWORD="${WIFI_PASSWORD}" )

target_compile_options( ${CMAKE_PROJECT_NAME} PRIVATE -Wall )

# 移除直接的lwip链接,pico_cyw43_arch_*组件已包含正确的LWIP依赖和配置
target_link_libraries( ${CMAKE_PROJECT_NAME} 
    pico_stdlib
    hardware_i2c
    pico_cyw43_arch_lwip_threadsafe_background
    /home/src/pico/picolib/build/libpicolib.a )

关键修改说明

  • 移除lwip库链接:pico_cyw43_arch_lwip_threadsafe_background已经内置了适配RP2040的LWIP配置,包括必要的头文件路径和依赖库,单独链接原生lwip会导致架构适配缺失。
  • 简化include目录:不需要手动添加LWIP的头文件路径,组件会自动引入所有LWIP核心及RP2040架构适配的头文件。
  • 给WIFI参数加引号:如果SSID或密码包含空格,未加引号会导致编译时参数被拆分,引发语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:35:24