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

Ubuntu下编译Raspberry Pi Pico项目遇/bin/sh语法错误求助

Raspberry Pi Pico编译崩溃:/bin/sh: 1: Syntax error: "(" unexpected

问题现象

  • 环境:Ubuntu系统,原可正常编译的Raspberry Pi Pico项目
  • 未引入pico-DMX库时,make编译正常;引入该库后,cmake ..配置成功,但编译立即崩溃
  • 核心错误发生在链接阶段:
PICO_SDK_PATH is /home/andrew/pico/pico-sdk
PICO platform is rp2040.
Build type is Release
PICO target board is pico.
Using board configuration from /home/andrew/pico/pico-sdk/src/boards/include/boards/pico.h
TinyUSB available at /home/andrew/pico/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; enabling build support for USB.
cyw43-driver available at /home/andrew/pico/pico-sdk/lib/cyw43-driver
lwIP available at /home/andrew/pico/pico-sdk/lib/lwip
-- Configuring done
-- Generating done
-- Build files have been written to: /home/andrew/pico/serial_pico (copy)/build
Scanning dependencies of target bs2_default
[  1%] Building ASM object pico-sdk/src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/compile_time_choice.S.obj
[  2%] Linking ASM executable bs2_default.elf
/bin/sh: 1: Syntax error: "(" unexpected
make[2]: *** [pico-sdk/src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/build.make:98: pico-sdk/src/rp2_common/boot_stage2/bs2_default.elf] Error 2
make[2]: *** Deleting file 'pico-sdk/src/rp2_common/boot_stage2/bs2_default.elf'
make[1]: *** [CMakeFiles/Makefile2:1493: pico-sdk/src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

主CMake文件:

cmake_minimum_required(VERSION 3.13)

include($ENV{PICO_SDK_PATH}/pico_sdk_init.cmake)

project(usb_control C CXX ASM)

set(CMAKE_CXX_STANDARD 17)

pico_sdk_init()

include($ENV{HOME}/pico/libraries/lib/Pico-DMX/interfaceLibForPicoSDK.cmake)
add_executable(usb_control
    main.cpp
)

target_link_libraries(usb_control picodmx pico_stdlib hardware_pio hardware_dma)

pico_enable_stdio_usb(usb_control 1)
pico_enable_stdio_uart(usb_control 0)

pico_add_extra_outputs(usb_control)

pico-DMX库的interfaceLibForPicoSDK.cmake:

## Include this file if you want to use the Pico-DMX library
## in YOUR (Pico-C-SDK-based) project.

cmake_minimum_required(VERSION 3.12)

# Define the Pico-DMX library
add_library(picodmx INTERFACE)

target_sources(picodmx INTERFACE
    ${CMAKE_CURRENT_LIST_DIR}/src/DmxInput.cpp
    ${CMAKE_CURRENT_LIST_DIR}/src/DmxOutput.cpp
)

pico_generate_pio_header(picodmx
    ${CMAKE_CURRENT_LIST_DIR}/extras/DmxInput.pio
)
pico_generate_pio_header(picodmx
    ${CMAKE_CURRENT_LIST_DIR}/extras/DmxOutput.pio
)

target_include_directories(picodmx INTERFACE
    ${CMAKE_CURRENT_LIST_DIR}/src
)

问题根源

你的项目路径/home/andrew/pico/serial_pico (copy)/build包含空格和括号,Shell在解析编译生成的命令时,会将括号识别为特殊语法符号,导致解析失败。引入pico-DMX库后触发问题,是因为库中pico_generate_pio_header等指令生成的编译命令对路径中的特殊字符更敏感。

解决方案

  1. 重命名项目目录:将带空格和括号的目录改为无特殊字符的名称,例如把serial_pico (copy)改为serial_pico_copy
  2. 清理并重建构建环境:
rm -rf "/home/andrew/pico/serial_pico (copy)/build"
mkdir /home/andrew/pico/serial_pico_copy/build
cd /home/andrew/pico/serial_pico_copy/build
cmake ..
make
  1. 验证库配置:你当前的interfaceLibForPicoSDK.cmake已经使用CMAKE_CURRENT_LIST_DIR引用路径,这部分无需修改

备选方案(不推荐)

若必须保留含特殊字符的路径,可在主CMake文件开头添加以下配置,强制使用bash解析命令:

set(CMAKE_SHELL "/bin/bash")

内容的提问来源于stack exchange,提问作者Andrew Karam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:05:24