我已经克隆了最新版本的 OpenPose 并尝试在 MacOS 13.5 (22G74) 上构建它。在我运行
make -j sysctl -n hw.logicalcpu
后,它会生成一堆错误,说我使用了过时的 C++ 版本:
/usr/local/include/google/protobuf/port_def.inc:205:1: error: static_assert failed due to requirement '201103L >= 201402L' "Protobuf only supports C++14 and newer."
static_assert(PROTOBUF_CPLUSPLUS_MIN(201402L), "Protobuf only supports C++14 and newer.");
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/absl/base/policy_checks.h:79:2: error: "C++ versions less than C++14 are not supported."
#error "C++ versions less than C++14 are not supported."
所以我搜索了 CMakeLists.txt 并将这些行添加到文件顶部:
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
还将部分 c++ 标志部分更改为
std=c++14
:
elseif (UNIX)
# Turn on C++14
add_definitions(-std=c++14)
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
elseif (APPLE)
# Turn on C++14
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
endif (WIN32)
# C++ additional flags
if (CMAKE_COMPILER_IS_GNUCXX)
message(STATUS "GCC detected, adding compile flags")
# set(OP_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp -Wpedantic -Wall -Wextra -Wfatal-errors")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
set(OP_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wpedantic -Wall -Wextra -Wfatal-errors")
# set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -Wpedantic -Wall -Wextra -Wfatal-errors")
endif (CMAKE_COMPILER_IS_GNUCXX)
然后删除构建文件夹并重新执行这些步骤,但仍然出现相同的错误。我在终端中检查了 CMake 配置摘要,发现 c++ 的标志仍然设置为版本 11:
-- ******************* Caffe Configuration Summary *******************
-- General:
-- Version : 1.0.0
-- Git : 1.0-149-g1807aada
-- System : Darwin
-- C++ compiler : /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- Release CXX flags : -O3 -DNDEBUG -fPIC -Wall -std=c++11 -Wno-sign-compare -Wno-uninitialized
-- Debug CXX flags : -g -fPIC -Wall -std=c++11 -Wno-sign-compare -Wno-uninitialized
-- Build type : Release
现在我不知道如何更改标志和编译器版本。
我也找不到如何在 cmake-gui 中更改此设置,GUI 如下所示:
欢迎任何解决方案!
CMake 3.1 中引入了
CMAKE_CXX_STANDARD
变量,因此请确保使用 cmake_minimum_required(VERSION 3.1)
。如果这没有帮助,我在 Stack Overflow 上找到了这篇文章(How do I activate C++ 11 in CMake?),它可以为您提供更深入的答案。