在新项目中包含头库显示重复 'constexpr' 错误
Including header library in a new project shows duplicate 'constexpr' error
我有两个独立的项目。第一个项目仅使用 range-v3 header only 库,我也想在我的新项目中使用 range 库,但是包含该库会显示重复的 constexpr
错误。我的第一个项目没有duplicate error
总结:
为什么在全新项目中使用范围库时我的编译器会抛出 duplicate symbol error
消息,我该如何解决该问题?
CLion 2019.3(项目启用 C++20 选项)
海湾合作委员会 9.2
ericniebler 的范围-v3 库
project structure
-cmake_build-debug
CMakeLists.txt
main.cpp
我的主要:
#include <vector>
#include <range/v3/view/transform.hpp> //throws error
int main() {
std::vector<int> myvec{1,2,3,4};
return 0;
}
在我的旧项目中有效的 CMake 代码:
cmake_minimum_required(VERSION 3.15)
project(codingchallange C CXX)
set(CMAKE_CXX_STANDARD 20)
set(SOURCE_FILES main.cpp)
add_library(range_v3 INTERFACE IMPORTED) set_target_properties(range_v3 PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES /home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include)
add_executable(codingchallange ${SOURCE_FILES})
target_link_libraries(codingchallange range_v3) #link libraries to exe
我的编译器抛出的错误信息:
Scanning dependencies of target codingchallange
[ 50%] Building CXX object CMakeFiles/codingchallange.dir/main.cpp.o
In file included from /home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/range_fwd.hpp:22,
from /home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/view/transform.hpp:23,
from /home/myname/CLionProjects/codingchallange/main.cpp:4:
/home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/range/conversion.hpp:207:19: error: duplicate ‘constexpr’
207 | constexpr CPP_concept_bool has_allocator_type =
| ^~~~~~~~~~~~~~~~
/home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/range/conversion.hpp:211:19: error: duplicate ‘constexpr’
211 | constexpr CPP_concept_bool range_and_not_view =
| ^~~~~~~~~~~~~~~~
/home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/range/conversion.hpp:223:19: error: duplicate ‘constexpr’
223 | constexpr CPP_concept_bool convertible_to_cont_impl_ =
| ^~~~~~~~~~~~~~~~
/home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/view/transform.hpp:74:19: error: duplicate ‘constexpr’
74 | constexpr CPP_concept_bool iter_transform_1_readable =
| ^~~~~~~~~~~~~~~~
/home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/view/transform.hpp:93:19: error: duplicate ‘constexpr’
93 | constexpr CPP_concept_bool iter_transform_2_readable =
已解决:我的旧 CMake 有一个我忘记使用的特定编译器选项(参见答案)。
我必须添加一个特定的编译器选项:
add_compile_options(-fconcepts) #enables concepts(unstable).
#Stable versions will be released with gcc/g++ 10
现在可以正常使用了。
我有两个独立的项目。第一个项目仅使用 range-v3 header only 库,我也想在我的新项目中使用 range 库,但是包含该库会显示重复的 constexpr
错误。我的第一个项目没有duplicate error
总结:
为什么在全新项目中使用范围库时我的编译器会抛出 duplicate symbol error
消息,我该如何解决该问题?
CLion 2019.3(项目启用 C++20 选项)
海湾合作委员会 9.2
ericniebler 的范围-v3 库
project structure
-cmake_build-debug
CMakeLists.txt
main.cpp
我的主要:
#include <vector>
#include <range/v3/view/transform.hpp> //throws error
int main() {
std::vector<int> myvec{1,2,3,4};
return 0;
}
在我的旧项目中有效的 CMake 代码:
cmake_minimum_required(VERSION 3.15)
project(codingchallange C CXX)
set(CMAKE_CXX_STANDARD 20)
set(SOURCE_FILES main.cpp)
add_library(range_v3 INTERFACE IMPORTED) set_target_properties(range_v3 PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES /home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include)
add_executable(codingchallange ${SOURCE_FILES})
target_link_libraries(codingchallange range_v3) #link libraries to exe
我的编译器抛出的错误信息:
Scanning dependencies of target codingchallange
[ 50%] Building CXX object CMakeFiles/codingchallange.dir/main.cpp.o
In file included from /home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/range_fwd.hpp:22,
from /home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/view/transform.hpp:23,
from /home/myname/CLionProjects/codingchallange/main.cpp:4:
/home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/range/conversion.hpp:207:19: error: duplicate ‘constexpr’
207 | constexpr CPP_concept_bool has_allocator_type =
| ^~~~~~~~~~~~~~~~
/home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/range/conversion.hpp:211:19: error: duplicate ‘constexpr’
211 | constexpr CPP_concept_bool range_and_not_view =
| ^~~~~~~~~~~~~~~~
/home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/range/conversion.hpp:223:19: error: duplicate ‘constexpr’
223 | constexpr CPP_concept_bool convertible_to_cont_impl_ =
| ^~~~~~~~~~~~~~~~
/home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/view/transform.hpp:74:19: error: duplicate ‘constexpr’
74 | constexpr CPP_concept_bool iter_transform_1_readable =
| ^~~~~~~~~~~~~~~~
/home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/view/transform.hpp:93:19: error: duplicate ‘constexpr’
93 | constexpr CPP_concept_bool iter_transform_2_readable =
已解决:我的旧 CMake 有一个我忘记使用的特定编译器选项(参见答案)。
我必须添加一个特定的编译器选项:
add_compile_options(-fconcepts) #enables concepts(unstable).
#Stable versions will be released with gcc/g++ 10
现在可以正常使用了。