我的问题是,我正在mac上开发一个cli软件,最后的二进制文件将在linux系统上执行。
因此,我使用一个接口编译,但我的错误似乎不是来自我的代码(因为它的工作就像一个魅力的mac),但你知道.我在cpp /工具链中没有足够的背景知识来理解是什么导致了linux上的错误,以及如何解决这个问题。
TLDR :
cpp_1 | [ 8%] Building CXX object core-lib/CMakeFiles/core-lib.dir/controllers/MainController.cpp.o
cpp_1 | In file included from /usr/src/OF/apps/project/core-lib/controllers/MainController.cpp:8:
cpp_1 | In file included from /usr/src/OF/apps/project/core-lib/controllers/MainController.hpp:11:
cpp_1 | In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/vector:61:
cpp_1 | In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/allocator.h:46:
cpp_1 | In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/x86_64-linux-gnu/c++/7.5.0/bits/c++allocator.h:33:
cpp_1 | /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/ext/new_allocator.h:93:7: error: multiple overloads of 'address' instantiate to the same signature '__gnu_cxx::new_allocator<const ColumnState>::const_pointer (__gnu_cxx::new_allocator<const ColumnState>::const_reference) const noexcept' (aka 'const ColumnState *(const ColumnState &) const noexcept')
cpp_1 | address(const_reference __x) const _GLIBCXX_NOEXCEPT
cpp_1 | ^
cpp_1 | /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/allocator.h:108:29: note: in instantiation of template class '__gnu_cxx::new_allocator<const ColumnState>' requested here
cpp_1 | class allocator: public __allocator_base<_Tp>
cpp_1 | ^
cpp_1 | /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/stl_deque.h:550:16: note: in instantiation of template class 'std::allocator<const ColumnState>' requested here
cpp_1 | : public _Tp_alloc_type
cpp_1 | ^
cpp_1 | /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/stl_deque.h:633:19: note: in instantiation of member class 'std::_Deque_base<const ColumnState, std::allocator<const ColumnState> >::_Deque_impl' requested here
cpp_1 | _Deque_impl _M_impl;
cpp_1 | ^
cpp_1 | /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/stl_deque.h:831:29: note: in instantiation of template class 'std::_Deque_base<const ColumnState, std::allocator<const ColumnState> >' requested here
cpp_1 | class deque : protected _Deque_base<_Tp, _Alloc>
cpp_1 | ^
cpp_1 | /usr/src/OF/apps/project/core-lib/io/AbstractInstallCommunicator.hpp:17:35: note: in instantiation of template class 'std::deque<const ColumnState, std::allocator<const ColumnState> >' requested here
cpp_1 | std::deque<const ColumnState> states;
cpp_1 | ^
cpp_1 | /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/ext/new_allocator.h:89:7: note: previous declaration is here
cpp_1 | address(reference __x) const _GLIBCXX_NOEXCEPTCMAKE配置:
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)linux配置:
ubuntu bionic
cmake --version : cmake version 3.16.5
make --version : GNU Make 4.1
clang --version : clang version 10.0.0-4ubuntu1~18.04.1 mac配置
Mojave 10.14.6
cmake --version : cmake version 3.16.3
make --version : GNU Make 3.81
clang --version : Apple clang version 11.0.0 (clang-1100.0.33.17)当我在mac上编译时,它工作得很好:
building
-- The C compiler identification is AppleClang 11.0.0.11000033
-- The CXX compiler identification is AppleClang 11.0.0.11000033
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found GLM: /usr/local/include
-- GLM_INCLUDE_DIR = /usr/local/include
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/fyoudine/Documents/workspaces/OF/of_v20190923_osx_release/apps/project-Optics/build
Scanning dependencies of target core-lib
[ 2%] Building CXX object core-lib/CMakeFiles/core-lib.dir/config/GlobalConf.cpp.o
[ 5%] Building CXX object core-lib/CMakeFiles/core-lib.dir/controllers/LightManager.cpp.o
[ 8%] Building CXX object core-lib/CMakeFiles/core-lib.dir/controllers/MainController.cpp.o
[ 11%] Building CXX object core-lib/CMakeFiles/core-lib.dir/d3/Object3D.cpp.o
[ 14%] Building CXX object core-lib/CMakeFiles/core-lib.dir/d3/Object3DChild.cpp.o
[ 17%] Building CXX object core-lib/CMakeFiles/core-lib.dir/install/AbstractInstall.cpp.o
[ 20%] Building CXX object core-lib/CMakeFiles/core-lib.dir/install/FileConfigurationInstall.cpp.o
[ 22%] Building CXX object core-lib/CMakeFiles/core-lib.dir/install/KineticInstall.cpp.o
[ 25%] Building CXX object core-lib/CMakeFiles/core-lib.dir/io/DMXCommunicator.cpp.o
[ 28%] Building CXX object core-lib/CMakeFiles/core-lib.dir/io/SimulatorInstallCommunicator.cpp.o
[ 31%] Building CXX object core-lib/CMakeFiles/core-lib.dir/positions/PositionSummaryMap.cpp.o
[ 34%] Building CXX object core-lib/CMakeFiles/core-lib.dir/positions/SimpleOptimalPositionFinder.cpp.o
[ 37%] Building CXX object core-lib/CMakeFiles/core-lib.dir/provider/SimpleAnimationProvider.cpp.o
[ 40%] Building CXX object core-lib/CMakeFiles/core-lib.dir/raytracing/Prism.cpp.o
[ 42%] Building CXX object core-lib/CMakeFiles/core-lib.dir/raytracing/Ray/AABB.cpp.o
[ 45%] Building CXX object core-lib/CMakeFiles/core-lib.dir/raytracing/Ray/Base.cpp.o
[ 48%] Building CXX object core-lib/CMakeFiles/core-lib.dir/raytracing/Ray/Plane.cpp.o
[ 51%] Building CXX object core-lib/CMakeFiles/core-lib.dir/raytracing/Ray/Ray.cpp.o
[ 54%] Building CXX object core-lib/CMakeFiles/core-lib.dir/raytracing/RayPath.cpp.o
[ 57%] Building CXX object core-lib/CMakeFiles/core-lib.dir/simulation/Environment.cpp.o
[ 60%] Building CXX object core-lib/CMakeFiles/core-lib.dir/simulation/Simulator.cpp.o
[ 62%] Building CXX object core-lib/CMakeFiles/core-lib.dir/simulation/anim/InstallAnimator.cpp.o
[ 65%] Building CXX object core-lib/CMakeFiles/core-lib.dir/simulation/anim/TweenColumnAnimator.cpp.o
[ 68%] Building CXX object core-lib/CMakeFiles/core-lib.dir/simulation/data/RayCastResult.cpp.o
[ 71%] Building CXX object core-lib/CMakeFiles/core-lib.dir/simulation/elements/ColumnData.cpp.o
[ 74%] Building CXX object core-lib/CMakeFiles/core-lib.dir/simulation/elements/Light.cpp.o
[ 77%] Building CXX object core-lib/CMakeFiles/core-lib.dir/simulation/elements/PrismData.cpp.o
[ 80%] Building CXX object core-lib/CMakeFiles/core-lib.dir/states/ColumnState.cpp.o
[ 82%] Building CXX object core-lib/CMakeFiles/core-lib.dir/states/InstallState.cpp.o
[ 85%] Building CXX object core-lib/CMakeFiles/core-lib.dir/utils/calculateSunPosition.cpp.o
[ 88%] Building CXX object core-lib/CMakeFiles/core-lib.dir/utils/spa.cpp.o
[ 91%] Building CXX object core-lib/CMakeFiles/core-lib.dir/utils/vec_color.cpp.o
[ 94%] Linking CXX static library ../libs/libcore-lib.a
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: ../libs/libcore-lib.a(InstallAnimator.cpp.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: ../libs/libcore-lib.a(InstallAnimator.cpp.o) has no symbols
[ 94%] Built target core-lib
Scanning dependencies of target project-cli
[ 97%] Building CXX object project-cli/CMakeFiles/project-cli.dir/main.cpp.o
[100%] Linking CXX executable ../../bin/project-cli
[100%] Built target project-cli,但当我通过docker为linux编译时:
starting docker_cpp_1 ... done
Attaching to docker_cpp_1
cpp_1 | building
cpp_1 | -- The C compiler identification is Clang 10.0.0
cpp_1 | -- The CXX compiler identification is Clang 10.0.0
cpp_1 | -- Check for working C compiler: /usr/bin/clang-10
cpp_1 | -- Check for working C compiler: /usr/bin/clang-10 -- works
cpp_1 | -- Detecting C compiler ABI info
cpp_1 | -- Detecting C compiler ABI info - done
cpp_1 | -- Detecting C compile features
cpp_1 | -- Detecting C compile features - done
cpp_1 | -- Check for working CXX compiler: /usr/bin/clang++-10
cpp_1 | -- Check for working CXX compiler: /usr/bin/clang++-10 -- works
cpp_1 | -- Detecting CXX compiler ABI info
cpp_1 | -- Detecting CXX compiler ABI info - done
cpp_1 | -- Detecting CXX compile features
cpp_1 | -- Detecting CXX compile features - done
cpp_1 | -- Found GLM: /usr/include
cpp_1 | -- GLM_INCLUDE_DIR = /usr/include
cpp_1 | -- Configuring done
cpp_1 | -- Generating done
cpp_1 | -- Build files have been written to: /usr/src/OF/apps/project/build
cpp_1 | Scanning dependencies of target core-lib
cpp_1 | [ 2%] Building CXX object core-lib/CMakeFiles/core-lib.dir/config/GlobalConf.cpp.o
cpp_1 | [ 5%] Building CXX object core-lib/CMakeFiles/core-lib.dir/controllers/LightManager.cpp.o
cpp_1 | [ 8%] Building CXX object core-lib/CMakeFiles/core-lib.dir/controllers/MainController.cpp.o
cpp_1 | In file included from /usr/src/OF/apps/project/core-lib/controllers/MainController.cpp:8:
cpp_1 | In file included from /usr/src/OF/apps/project/core-lib/controllers/MainController.hpp:11:
cpp_1 | In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/vector:61:
cpp_1 | In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/allocator.h:46:
cpp_1 | In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/x86_64-linux-gnu/c++/7.5.0/bits/c++allocator.h:33:
cpp_1 | /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/ext/new_allocator.h:93:7: error: multiple overloads of 'address' instantiate to the same signature '__gnu_cxx::new_allocator<const ColumnState>::const_pointer (__gnu_cxx::new_allocator<const ColumnState>::const_reference) const noexcept' (aka 'const ColumnState *(const ColumnState &) const noexcept')
cpp_1 | address(const_reference __x) const _GLIBCXX_NOEXCEPT
cpp_1 | ^
cpp_1 | /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/allocator.h:108:29: note: in instantiation of template class '__gnu_cxx::new_allocator<const ColumnState>' requested here
cpp_1 | class allocator: public __allocator_base<_Tp>
cpp_1 | ^
cpp_1 | /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/stl_deque.h:550:16: note: in instantiation of template class 'std::allocator<const ColumnState>' requested here
cpp_1 | : public _Tp_alloc_type
cpp_1 | ^
cpp_1 | /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/stl_deque.h:633:19: note: in instantiation of member class 'std::_Deque_base<const ColumnState, std::allocator<const ColumnState> >::_Deque_impl' requested here
cpp_1 | _Deque_impl _M_impl;
cpp_1 | ^
cpp_1 | /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/stl_deque.h:831:29: note: in instantiation of template class 'std::_Deque_base<const ColumnState, std::allocator<const ColumnState> >' requested here
cpp_1 | class deque : protected _Deque_base<_Tp, _Alloc>
cpp_1 | ^
cpp_1 | /usr/src/OF/apps/project/core-lib/io/AbstractInstallCommunicator.hpp:17:35: note: in instantiation of template class 'std::deque<const ColumnState, std::allocator<const ColumnState> >' requested here
cpp_1 | std::deque<const ColumnState> states;
cpp_1 | ^
cpp_1 | /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/ext/new_allocator.h:89:7: note: previous declaration is here
cpp_1 | address(reference __x) const _GLIBCXX_NOEXCEPT
cpp_1 | ^
cpp_1 | In file included from /usr/src/OF/apps/project/core-lib/controllers/MainController.cpp:8:
cpp_1 | In file included from /usr/src/OF/apps/project/core-lib/controllers/MainController.hpp:16:
cpp_1 | In file included from /usr/src/OF/apps/project/core-lib/install/AbstractInstall.hpp:11:
cpp_1 | In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/deque:64:
cpp_1 | /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/stl_deque.h:843:31: error: '_Tp_alloc_type' is a protected member of 'std::_Deque_base<const ColumnState, std::allocator<const ColumnState> >'
cpp_1 | typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
cpp_1 | ^
cpp_1 | /usr/src/OF/apps/project/core-lib/io/AbstractInstallCommunicator.hpp:17:35: note: in instantiation of template class 'std::deque<const ColumnState, std::allocator<const ColumnState> >' requested here
cpp_1 | std::deque<const ColumnState> states;
cpp_1 | ^
cpp_1 | /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/stl_deque.h:464:21: note: declared protected here
cpp_1 | rebind<_Tp>::other _Tp_alloc_type;
cpp_1 | ^
cpp_1 | /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/stl_deque.h:844:31: error: '_Alloc_traits' is a protected member of 'std::_Deque_base<const ColumnState, std::allocator<const ColumnState> >'
cpp_1 | typedef typename _Base::_Alloc_traits _Alloc_traits;
cpp_1 | ^
cpp_1 | /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/stl_deque.h:465:58: note: declared protected here
cpp_1 | typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Alloc_traits;
cpp_1 | ^
cpp_1 | /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/stl_deque.h:845:31: error: '_Map_pointer' is a protected member of 'std::_Deque_base<const ColumnState, std::allocator<const ColumnState> >'
cpp_1 | typedef typename _Base::_Map_pointer _Map_pointer;
cpp_1 | ^
cpp_1 | /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/bits/stl_deque.h:544:47: note: declared protected here
cpp_1 | typedef typename iterator::_Map_pointer _Map_pointer;
cpp_1 | ^
cpp_1 | 4 errors generated.
cpp_1 | make[2]: *** [core-lib/CMakeFiles/core-lib.dir/controllers/MainController.cpp.o] Error 1
cpp_1 | core-lib/CMakeFiles/core-lib.dir/build.make:88: recipe for target 'core-lib/CMakeFiles/core-lib.dir/controllers/MainController.cpp.o' failed
cpp_1 | make[1]: *** [core-lib/CMakeFiles/core-lib.dir/all] Error 2
cpp_1 | CMakeFiles/Makefile2:114: recipe for target 'core-lib/CMakeFiles/core-lib.dir/all' failed
cpp_1 | make: *** [all] Error 2
cpp_1 | Makefile:83: recipe for target 'all' failed
docker_cpp_1 exited with code 2这两个文件都是用相同的命令编译的:
cmake .. && make发布于 2020-07-29 11:48:40
错误本身来自std::deque<const ColumnState> states的定义。在C+11之前,std::deque的元素类型必须是CopyAssignable和CopyConstructible (因此不能像在代码中那样限定const )-请参阅std::deque。
在C+11之后,约束实际上是由deque上所做的操作施加的:
强加在元素上的需求取决于在容器上执行的实际操作。一般来说,元素类型是一个完整的类型,满足了可擦除的要求,但是许多成员函数都提出了更严格的要求。
因此,如果没有看到操纵states的代码,就很难看出究竟是什么触发了这一点。一个简单的解决方法(如果上下文允许的话)是删除const。当然,这两个编译器的行为都应该是相同的(如果它们都遵守c++17,并且实际上对变量进行了违反恒常性的操作),但是如果您只需要快速修复,就可以这样做。
https://stackoverflow.com/questions/63152550
复制相似问题