我已经研究这个问题几天了,似乎无法在任何在线论坛/文档中找到答案。 这就是我正在做的事情:我有一个 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 文件中添加另一个库吗?
非常感谢大家。
我调查了一段时间,但找不到有关该主题的任何信息。
自己寻找答案,我发现树莓派论坛上的一个帖子说pico不支持C++标准库。听起来你最好的选择是使用具有互斥体和信号量的pico_sync API。