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等指令生成的编译命令对路径中的特殊字符更敏感。
解决方案
- 重命名项目目录:将带空格和括号的目录改为无特殊字符的名称,例如把
serial_pico (copy)改为serial_pico_copy - 清理并重建构建环境:
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
- 验证库配置:你当前的
interfaceLibForPicoSDK.cmake已经使用CMAKE_CURRENT_LIST_DIR引用路径,这部分无需修改
备选方案(不推荐)
若必须保留含特殊字符的路径,可在主CMake文件开头添加以下配置,强制使用bash解析命令:
set(CMAKE_SHELL "/bin/bash")
内容的提问来源于stack exchange,提问作者Andrew Karam
相关产品推荐
相关产品推荐

