【问题标题】:" /bin/sh: 1: Syntax error: "(" unexpected " error while building code for raspberry pi pico\" /bin/sh: 1: Syntax error: \"(\" unexpected \" error while building code for raspberry pi pico
【发布时间】:2022-10-05 16:17:58
【问题描述】:

我在 Ubuntu 上。 我是试图建立一个我知道有效的简单项目! (我已经让它工作了)我不认为我改变了它,但已经三天了,我找不到让它再次构建的方法。

我使用一个名为 pico-DMX 的库,每当我不使用 cmake 中的“include”将它添加到我的项目中时,make 就会开始构建。

否则,如果我在 cmake 代码中包含该库,则 cmake .. 命令处理并正常生成,但构建 c 试图构建一个我知道的简单项目会立即工作。我似乎无法理解它来自哪里。

这是错误消息:

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)

之前的 cmake 文件包括 $ENV{HOME}/pico/libraries/lib/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
)

同样,我知道 C++ 代码中没有错误,它成功了!当我使用 Cmake 将 pico-dmx 的库依赖项直接包含在其 cmake 文件中时,它开始出现错误并且无法再次工作。

如果您有任何问题,请随时提出,我会尽快回答。预先感谢您的帮助

  • 在你的当前版本和你之前在源代码控制系统中工作的提交之间做一个diff(比如git),看看有什么变化。或者查看您以前的工作版本并放弃您的更改。
  • 有没有可能你正在建造的任何环境现在与旧的相比,有不同的外壳吗?该错误听起来可能链接器命令的某些部分期望 /bin/sh 是一个 bash shell,但现在它不是。
  • 您可以使用--verboseVERBOSE=1 构建,以便我们看到正在执行的实际命令吗?
  • @SebastianRedl 这很奇怪,我不明白当我不包含(在 cmakefile 中)库 pico-dmx 时它是如何通过此步骤的。另外我仍然可以构建其他项目
  • 如果您要将所有这些都放在 cmets 中,请改为 edit your question

标签: c++ ubuntu cmake raspberry-pi-pico


【解决方案1】:

如 cmets 中所述,原因是您的目录名称。为了准确解释为什么会发生,我自己复制了你的情况。我在“/tmp/test checkout (copy)”下创建了一个虚拟项目,并使用 CMake 构建:

cd "/tmp/test checkout (copy)/build/pico-sdk/src/rp2_common/boot_stage2" && \
arm-none-eabi-objdump -h /tmp/test\ checkout\ (copy)/build/pico-sdk/src/rp2_common/boot_stage2/bs2_default.elf >bs2_default.dis

请注意,完整文件名中的空格用反斜杠正确转义,但括号不是。这使外壳感到困惑。

我在 Pico SDK 上提出了this issue。在修复之前,人们应该避免在其目录结构中使用特殊字符。一般来说,这是一个很好的建议,因为它可以避免此类情况。

【讨论】:

    猜你喜欢
    • 2015-04-24
    • 1970-01-01
    • 2014-10-06
    • 2014-05-02
    • 2023-01-24
    • 1970-01-01
    • 2016-06-17
    • 2022-08-17
    • 1970-01-01
    相关资源
    最近更新 更多