std::mutex 编译 RPi Pico (CMake) 时出现错误

问题描述 投票:0回答:1

我已经研究这个问题几天了,似乎无法在任何在线论坛/文档中找到答案。 这就是我正在做的事情:我有一个 RPi 3B 通过 USB 连接到 RPi Pico (实际上它还没有连接,但这无关紧要,我现在只是构建二进制文件)。我通过计算机 SSH 连接到 3B,并将所有项目存储在该设备中。 我正在使用 cmake 来编译和运行所有内容。输入

cmake ..
后,我再输入
sudo make VERBOSE=1

文件结构概览:

PovGlobe
|--depes
|--build
|--cpp_src
|--...

以下是 PovGlobe(父)目录中 CMakeLists.txt 的快照: CMakeLists.text

cmake_minimum_required(VERSION 3.10)

set(PICO_SDK_FETCH_FROM_GIT on)

set(PICO_SDK_PATH "/home/nicoc/PovGlobe/depes/pico-sdk")
include(/home/nicoc/PovGlobe/depes/pico-sdk/pico_sdk_init.cmake)

project(PovGlobe)

set(EXT_DIR ./ext)
set(PICO_SDK_FETCH_FROM_GIT on)
set(PYTHON_LIBRARIES "/usr/lib/aarch64-linux-gnu/libpython3.11.so")
set(PYTHON_INCLUDE_DIRS "/usr/include/python3.11")


pico_sdk_init()

set(CORE_LIB_NAME ${CMAKE_PROJECT_NAME}_core_lib)
set(HW_LIB_EXT_NAME ${CMAKE_PROJECT_NAME}_hw_lib_ext)
set(SIM_LIB_EXT_NAME ${CMAKE_PROJECT_NAME}_sim_lib_ext)
set(APPS_LIB_NAME ${CMAKE_PROJECT_NAME}_apps_lib)

set(PY_WRAPPER_LIB_NAME Py${CMAKE_PROJECT_NAME})

set(EXEC_MAIN_NAME ${CMAKE_PROJECT_NAME})

if(NOT CMAKE_BUILD_TYPE)
  set(CMAKE_BUILD_TYPE Release)
endif()

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
...

(我排除了我认为不相关的额外行)

运行

sudo make VERBOSE=1
后,编译器启动但以此错误结束(实际上提到错误两次,因为我使用了互斥体两次):

控制台输出:

[ 50%] Building CXX object cpp_src/PovGlobe/sim/CMakeFiles/PovGlobe_sim_lib_ext.dir/renderer_sim.cpp.obj
cd /home/nicoc/PovGlobe/build/cpp_src/PovGlobe/sim && /usr/bin/arm-none-eabi-g++ -DSIM_AVAILABLE  -Wall -Wextra -O3 -std=gnu++14 -MD -MT cpp_src/PovGlobe/sim/CMakeFiles/PovGlobe_sim_lib_ext.dir/renderer_sim.cpp.obj -MF CMakeFiles/PovGlobe_sim_lib_ext.dir/renderer_sim.cpp.obj.d -o CMakeFiles/PovGlobe_sim_lib_ext.dir/renderer_sim.cpp.obj -c /home/nicoc/PovGlobe/cpp_src/PovGlobe/sim/renderer_sim.cpp
(skipping warnings)
/home/nicoc/PovGlobe/cpp_src/PovGlobe/sim/../core/globe.hpp:9:1: note: 'std::mutex' is defined in header '<mutex>'; did you forget to '#include <mutex>'?
    8 | #include "helper.hpp"
  +++ |+#include <mutex>
    9 | #include <mutex>
/home/nicoc/PovGlobe/cpp_src/PovGlobe/sim/../core/globe.hpp:69:10: error: 'mutex' in namespace 'std' does not name a type
   69 |     std::mutex m_double_buffer_mutex;
      |          ^~~~~
/home/nicoc/PovGlobe/cpp_src/PovGlobe/sim/../core/globe.hpp:69:5: note: 'std::mutex' is defined in header '<mutex>'; did you forget to '#include <mutex>'?
   69 |     std::mutex m_double_buffer_mutex;
      |     ^~~

您甚至可以在回溯期间看到互斥体已经包含在内(即使如此,它也建议再次包含它) 有两个使用 sdt::mutex 的 hpp 文件,它们都以几乎完全相同的方式抛出错误。 我的编译器有问题吗?我应该在 CMake 文件中添加另一个库吗?

非常感谢大家。

我调查了一段时间,但找不到有关该主题的任何信息。

c++ cmake raspberry-pi g++ raspberry-pi-pico
1个回答
0
投票

自己寻找答案,我发现树莓派论坛上的一个帖子说pico不支持C++标准库。听起来你最好的选择是使用具有互斥体和信号量的pico_sync API

© www.soinside.com 2019 - 2024. All rights reserved.