Android常用C++特性之std::piecewise_construct

声明:本文内容生成自ChatGPT,目的是为方便大家了解学习作为引用到作者的其他文章中。

std::piecewise_construct 的原理在于提供了一种高效的方式来构造关联容器中的键和值,尤其适用于复杂的键值对。其核心是利用参数包和完美转发的特性,以避免不必要的临时对象和拷贝。

原理

  1. 完美转发std::piecewise_construct 配合 std::make_tuple 使用时,可以将构造函数所需的参数直接转发到键和值的构造函数中。这使得在插入元素时,可以直接使用原始参数,避免了中间临时对象的创建。

  2. 分开构造std::piecewise_construct 使得容器能够分别处理键和值的构造。这意味着容器可以使用传入的参数创建键和值,而不是先创建一个临时键值对对象。

  3. 避免拷贝:通过直接构造键和值,避免了因临时对象引起的额外拷贝或移动,从而提高了性能。

使用方法

步骤
  1. 包含必要的头文件

    #include <map>
    #include <tuple>
    
  2. 定义键和值的类型:可以是任意自定义类型。

  3. 插入元素: 使用 std::piecewise_constructstd::make_tuple 插入元素。

示例代码

下面是一个示例,演示如何使用 std::piecewise_construct

#include <iostream>
#include <map>
#include <tuple>

struct Key {
    int a;
    double b;
    Key(int x, double y) : a(x), b(y) {}
};

struct Value {
    std::string str;
    Value(std::string s) : str(s) {}
};

int main() {
    std::map<Key, Value> myMap;

    // 使用 std::piecewise_construct 插入元素
    myMap.emplace(
        std::piecewise_construct,
        std::make_tuple(1, 2.5), // 键的构造参数
        std::make_tuple("Hello") // 值的构造参数
    );

    // 验证插入
    for (const auto& pair : myMap) {
        std::cout << "Key: (" << pair.first.a << ", " << pair.first.b << "), "
                  << "Value: " << pair.second.str << '\n';
    }

    return 0;
}

解释

  • std::piecewise_construct 通知容器分别构造键和值。
  • std::make_tuple 用于创建传递给构造函数的参数。

通过这种方式,可以在构造复杂类型的键值对时,确保更高效的内存使用和性能,尤其是在处理需要多个构造参数的自定义类型时。

In file included from D:/SelfUsing/Language/CLion 2025.1.3/mingw/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/bits/hashtable_policy.h:34, from D:/SelfUsing/Language/CLion 2025.1.3/mingw/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/bits/hashtable.h:35, from D:/SelfUsing/Language/CLion 2025.1.3/mingw/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/bits/unordered_map.h:33, from D:/SelfUsing/Language/CLion 2025.1.3/mingw/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/unordered_map:41, from D:/obj/i wanna own world to me/i wanna own world to me.cpp:9: D:/SelfUsing/Language/CLion 2025.1.3/mingw/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/tuple: In instantiation of 'constexpr std::pair<_T1, _T2>::pair(std::tuple<_Args1 ...>&, std::tuple<_Args2 ...>&, std::_Index_tuple<_Indexes1 ...>, std::_Index_tuple<_Indexes2 ...>) [with _Args1 = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&}; long long unsigned int ..._Indexes1 = {0}; _Args2 = {}; long long unsigned int ..._Indexes2 = {}; _T1 = const std::__cxx11::basic_string<char>; _T2 = SDL_GL_Image]': D:/SelfUsing/Language/CLion 2025.1.3/mingw/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/tuple:2877:63: required from 'constexpr std::pair<_T1, _T2>::pair(std::piecewise_construct_t, std::tuple<_Args1 ...>, std::tuple<_Args2 ...>) [with _Args1 = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&}; _Args2 = {}; _T1 = const std::__cxx11::basic_string<char>; _T2 = SDL_GL_Image]' 2877 | typename _Build_index_tuple<sizeof...(_Args2)>::__type()) | ^ D:/SelfUsing/Language/CLion 2025.1.3/mingw/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/bits/stl_construct.h:97:14: required from 'constexpr decltype (::new(void*(0)) _Tp) std::construct_at(_Tp*, _Args&& ...) [with _Tp = pair<const __cxx11::basic_string<char>, SDL_GL_Image>; _Args = {const piecewise_construct_t&, tuple<__cxx11::basic_string<char, char_traits<char>, allocator<char> >&&>, tuple<>}; decltype (::new(void*(0)) _Tp) = pair<const __cxx11::basic_string<char>, SDL_GL_Image>*]' 97 | { return ::new((void*)__location) _Tp(std::forward<_Args>(__args)...); } | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ D:/SelfUsing/Language/CLion 2025.1.3/mingw/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/bits/alloc_traits.h:536:21: required from 'static constexpr void std::allocator_traits<std::allocator<_Up> >::construct(allocator_type&, _Up*, _Args&& ...) [with _Up = std::pair<const std::__cxx11::basic_string<char>, SDL_GL_Image>; _Args = {const std::piecewise_construct_t&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&>, std::tuple<>}; _Tp = std::__detail::_Hash_node<std::pair<const std::__cxx11::basic_string<char>, SDL_GL_Image>, true>; allocator_type = std::allocator<std::__detail::_Hash_node<std::pair<const std::__cxx11::basic_string<char>, SDL_GL_Image>, true> >]' 536 | std::construct_at(__p, std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ D:/SelfUsing/Language/CLion 2025.1.3/mingw/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/bits/hashtable_policy.h:2024:36: required from 'std::__detail::_Hashtable_alloc<_NodeAlloc>::__node_type* std::__detail::_Hashtable_alloc<_NodeAlloc>::_M_allocate_node(_Args&& ...) [with _Args = {const std::piecewise_construct_t&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&>, std::tuple<>}; _NodeAlloc = std::allocator<std::__detail::_Hash_node<std::pair<const std::__cxx11::basic_string<char>, SDL_GL_Image>, true> >; __node_ptr = std::allocator<std::__detail::_Hash_node<std::pair<const std::__cxx11::basic_string<char>, SDL_GL_Image>, true> >::value_type*]' 2024 | __node_alloc_traits::construct(__alloc, __n->_M_valptr(), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ 2025 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ D:/SelfUsing/Language/CLion 2025.1.3/mingw/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/bits/hashtable.h:312:35: required from 'std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::_Scoped_node::_Scoped_node(std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::__hashtable_alloc*, _Args&& ...) [with _Args = {const std::piecewise_construct_t&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&>, std::tuple<>}; _Key = std::__cxx11::basic_string<char>; _Value = std::pair<const std::__cxx11::basic_string<char>, SDL_GL_Image>; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, SDL_GL_Image> >; _ExtractKey = std::__detail::_Select1st; _Equal = std::equal_to<std::__cxx11::basic_string<char> >; _Hash = std::hash<std::__cxx11::basic_string<char> >; _RangeHash = std::__detail::_Mod_range_hashing; _Unused = std::__detail::_Default_ranged_hash; _RehashPolicy = std::__detail::_Prime_rehash_policy; _Traits = std::__detail::_Hashtable_traits<true, false, true>; std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::__hashtable_alloc = std::_Hashtable<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, SDL_GL_Image>, std::allocator<std::pair<const std::__cxx11::basic_string<char>, SDL_GL_Image> >, std::__detail::_Select1st, std::equal_to<std::__cxx11::basic_string<char> >, std::hash<std::__cxx11::basic_string<char> >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >::__hashtable_alloc]' 312 | _M_node(__h->_M_allocate_node(std::forward<_Args>(__args)...)) | ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ D:/SelfUsing/Language/CLion 2025.1.3/mingw/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/bits/hashtable_policy.h:870:42: required from 'std::__detail::_Map_base<_Key, std::pair<const _Key, _Val>, _Alloc, std::__detail::_Select1st, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true>::mapped_type& std::__detail::_Map_base<_Key, std::pair<const _Key, _Val>, _Alloc, std::__detail::_Select1st, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true>::operator[](key_type&&) [with _Key = std::__cxx11::basic_string<char>; _Val = SDL_GL_Image; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, SDL_GL_Image> >; _Equal = std::equal_to<std::__cxx11::basic_string<char> >; _Hash = std::hash<std::__cxx11::basic_string<char> >; _RangeHash = std::__detail::_Mod_range_hashing; _Unused = std::__detail::_Default_ranged_hash; _RehashPolicy = std::__detail::_Prime_rehash_policy; _Traits = std::__detail::_Hashtable_traits<true, false, true>; mapped_type = SDL_GL_Image; key_type = std::__cxx11::basic_string<char>]' 870 | typename __hashtable::_Scoped_node __node { | ^~~~~~ D:/SelfUsing/Language/CLion 2025.1.3/mingw/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/bits/unordered_map.h:992:20: required from 'std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::mapped_type& std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::operator[](key_type&&) [with _Key = std::__cxx11::basic_string<char>; _Tp = SDL_GL_Image; _Hash = std::hash<std::__cxx11::basic_string<char> >; _Pred = std::equal_to<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, SDL_GL_Image> >; mapped_type = SDL_GL_Image; key_type = std::__cxx11::basic_string<char>]' 992 | { return _M_h[std::move(__k)]; } | ~~~~^ D:/obj/i wanna own world to me/i wanna own world to me.cpp:164:57: required from here 164 | glBindTexture(GL_TEXTURE_2D, images["sprBrownBlock"s].textureID); | ^ D:/SelfUsing/Language/CLion 2025.1.3/mingw/lib/gcc/x86_64-w64-mingw32/14.2.0/include/c++/tuple:2888:9: error: no matching function for call to 'SDL_GL_Image::SDL_GL_Image()' 2888 | second(std::forward<_Args2>(std::get<_Indexes2>(__tuple2))...) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ D:/obj/i wanna own world to me/i wanna own world to me.cpp:43:14: note: candidate: 'SDL_GL_Image::SDL_GL_Image(const char*)' 43 | explicit SDL_GL_Image(const char* path) { | ^~~~~~~~~~~~ D:/obj/i wanna own world to me/i wanna own world to me.cpp:43:14: note: candidate expects 1 argument, 0 provided D:/obj/i wanna own world to me/i wanna own world to me.cpp:39:7: note: candidate: 'constexpr SDL_GL_Image::SDL_GL_Image(const SDL_GL_Image&)' 39 | union SDL_GL_Image { | ^~~~~~~~~~~~ D:/obj/i wanna own world to me/i wanna own world to me.cpp:39:7: note: candidate expects 1 argument, 0 provided ninja: build stopped: subcommand failed.
最新发布
08-05
#/home/adam/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=aarch64-linux-android28 --sysroot=/home/adam/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/linux-x86_64/sysroot -o syshandle syshandle.cpp g++ -o syshandle syshandle.cpp syshandle.cpp: In function ‘auto syshandleInit()’: syshandle.cpp:330:83: error: no matching function for call to ‘myread::myread(<brace-enclosed initializer list>)’ 330 | auto mm=new myread{{{"Seccomp:$#",setZero},{"Seccomp_filters:$#",setZero}}}); | ^ syshandle.cpp:281:9: note: candidate: ‘myread::myread(const stateMM&)’ 281 | myread(const stateMM& s):syshandle(),sm(s){}; | ^~~~~~ syshandle.cpp:281:31: note: no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘const stateMM&’ 281 | myread(const stateMM& s):syshandle(),sm(s){}; | ~~~~~~~~~~~~~~~^ In file included from /usr/include/c++/13/bits/memory_resource.h:47, from /usr/include/c++/13/list:73, from syshandle.cpp:1: /usr/include/c++/13/tuple: In instantiation of ‘std::pair<_T1, _T2>::pair(std::tuple<_Args1 ...>&, std::tuple<_Args2 ...>&, std::_Index_tuple<_Indexes1 ...>, std::_Index_tuple<_Indexes2 ...>) [with _Args1 = {const int&}; long unsigned int ..._Indexes1 = {0}; _Args2 = {}; long unsigned int ..._Indexes2 = {}; _T1 = const int; _T2 = stateMM]’: /usr/include/c++/13/tuple:2257:63: required from ‘std::pair<_T1, _T2>::pair(std::piecewise_construct_t, std::tuple<_Args1 ...>, std::tuple<_Args2 ...>) [with _Args1 = {const int&}; _Args2 = {}; _T1 = const int; _T2 = stateMM]’ /usr/include/c++/13/bits/new_allocator.h:191:4: required from ‘void std::__new_allocator<_Tp>::construct(_Up*, _Args&& ...) [with _Up = std::pair<const int, stateMM>; _Args = {const std::piecewise_construct_t&, std::tuple<const int&>, std::tuple<>};
03-22
udo make -j8 Scanning dependencies of target opencv_highgui_plugins Scanning dependencies of target ittnotify Scanning dependencies of target quirc Scanning dependencies of target libprotobuf Scanning dependencies of target ade Scanning dependencies of target opencv_videoio_plugins Scanning dependencies of target gen_opencv_python_source [ 0%] Built target opencv_videoio_plugins [ 0%] Building C object 3rdparty/ittnotify/CMakeFiles/ittnotify.dir/src/ittnotify/ittnotify_static.c.o [ 0%] Built target opencv_highgui_plugins [ 0%] Building C object 3rdparty/quirc/CMakeFiles/quirc.dir/src/decode.c.o [ 0%] Building C object 3rdparty/quirc/CMakeFiles/quirc.dir/src/quirc.c.o [ 0%] Generate files for Python bindings and documentation [ 0%] Building CXX object CMakeFiles/ade.dir/3rdparty/ade/ade-0.1.1f/sources/ade/source/alloc.cpp.o [ 0%] Building C object 3rdparty/quirc/CMakeFiles/quirc.dir/src/version_db.c.o [ 0%] Building C object 3rdparty/ittnotify/CMakeFiles/ittnotify.dir/src/ittnotify/jitprofiling.c.o [ 0%] Building CXX object CMakeFiles/ade.dir/3rdparty/ade/ade-0.1.1f/sources/ade/source/assert.cpp.o [ 0%] Building CXX object 3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/any_lite.cc.o [ 0%] Building CXX object 3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/arena.cc.o [ 0%] Building CXX object 3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/arenastring.cc.o [ 0%] Building CXX object CMakeFiles/ade.dir/3rdparty/ade/ade-0.1.1f/sources/ade/source/check_cycles.cpp.o [ 0%] Building CXX object CMakeFiles/ade.dir/3rdparty/ade/ade-0.1.1f/sources/ade/source/edge.cpp.o [ 0%] Building CXX object CMakeFiles/ade.dir/3rdparty/ade/ade-0.1.1f/sources/ade/source/execution_engine.cpp.o [ 0%] Building CXX object 3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/extension_set.cc.o Note: Class Feature2D has more than 1 base class (not supported by Python C extensions) Bases: cv::Algorithm, cv::class, cv::Feature2D, cv::Algorithm Only the first base class will be used [ 0%] Building CXX object 3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/generated_message_util.cc.o [ 1%] Linking C static library ../lib/libittnotify.a [ 1%] Built target ittnotify [ 1%] Building CXX object CMakeFiles/ade.dir/3rdparty/ade/ade-0.1.1f/sources/ade/source/graph.cpp.o [ 1%] Building CXX object 3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/implicit_weak_message.cc.o Note: Class detail_GraphCutSeamFinder has more than 1 base class (not supported by Python C extensions) Bases: cv::detail::GraphCutSeamFinderBase, cv::detail::SeamFinder Only the first base class will be used [ 1%] Building CXX object CMakeFiles/ade.dir/3rdparty/ade/ade-0.1.1f/sources/ade/source/memory_accessor.cpp.o [ 2%] Linking C static library ../lib/libquirc.a [ 2%] Built target quirc [ 2%] Processing OpenCL kernels (core) Scanning dependencies of target opencv_core [ 2%] Building CXX object 3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/io/coded_stream.cc.o [ 2%] Building CXX object CMakeFiles/ade.dir/3rdparty/ade/ade-0.1.1f/sources/ade/source/memory_descriptor.cpp.o [ 2%] Built target gen_opencv_python_source [ 2%] Building CXX object 3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/io/io_win32.cc.o [ 2%] Building CXX object 3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/io/strtod.cc.o [ 2%] Building CXX object CMakeFiles/ade.dir/3rdparty/ade/ade-0.1.1f/sources/ade/source/memory_descriptor_ref.cpp.o [ 2%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/src/algorithm.cpp.o [ 2%] Building CXX object CMakeFiles/ade.dir/3rdparty/ade/ade-0.1.1f/sources/ade/source/memory_descriptor_view.cpp.o [ 2%] Building CXX object CMakeFiles/ade.dir/3rdparty/ade/ade-0.1.1f/sources/ade/source/metadata.cpp.o [ 2%] Building CXX object 3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/io/zero_copy_stream.cc.o [ 2%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/src/alloc.cpp.o [ 2%] Building CXX object CMakeFiles/ade.dir/3rdparty/ade/ade-0.1.1f/sources/ade/source/metatypes.cpp.o In file included from /home/z/下载/opencv-4.5.5/modules/core/include/opencv2/core/utility.hpp:56, from /home/z/下载/opencv-4.5.5/modules/core/src/precomp.hpp:53, from /home/z/下载/opencv-4.5.5/modules/core/src/algorithm.cpp:43: /home/z/下载/opencv-4.5.5/modules/core/include/opencv2/core.hpp: In function ‘cv::String& cv::operator<<(cv::String&, const cv::Mat&)’: /home/z/下载/opencv-4.5.5/modules/core/include/opencv2/core.hpp:3102:47: internal compiler error: 段错误 3102 | return out << Formatter::get()->format(mtx); | ^ [ 2%] Building CXX object 3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/io/zero_copy_stream_impl.cc.o [ 3%] Building CXX object CMakeFiles/ade.dir/3rdparty/ade/ade-0.1.1f/sources/ade/source/node.cpp.o 0x7f2e0e35c08f ??? /build/glibc-FcRMwW/glibc-2.31/signal/../sysdeps/unix/sysv/linux/x86_64/sigaction.c:0 0x7f2e0e33d082 __libc_start_main ../csu/libc-start.c:308 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <file:///usr/share/doc/gcc-9/README.Bugs> for instructions. make[2]: *** [modules/core/CMakeFiles/opencv_core.dir/build.make:90:modules/core/CMakeFiles/opencv_core.dir/src/algorithm.cpp.o] 错误 1 make[2]: *** 正在等待未完成的任务.... [ 3%] Building CXX object CMakeFiles/ade.dir/3rdparty/ade/ade-0.1.1f/sources/ade/source/passes/communications.cpp.o [ 3%] Building CXX object CMakeFiles/ade.dir/3rdparty/ade/ade-0.1.1f/sources/ade/source/search.cpp.o [ 4%] Building CXX object 3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/io/zero_copy_stream_impl_lite.cc.o In file included from /usr/include/c++/9/istream:991, from /usr/include/c++/9/iostream:40, from /home/z/下载/opencv-4.5.5/3rdparty/protobuf/src/google/protobuf/io/zero_copy_stream_impl.cc:44: /usr/include/c++/9/bits/istream.tcc: In member function ‘std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::get(std::basic_istream<_CharT, _Traits>::char_type*, std::streamsize, std::basic_istream<_CharT, _Traits>::char_type)’: /usr/include/c++/9/bits/istream.tcc:326:66: internal compiler error: 段错误 326 | const int_type __idelim = traits_type::to_int_type(__delim); | ^ 0x7f0aca24708f ??? /build/glibc-FcRMwW/glibc-2.31/signal/../sysdeps/unix/sysv/linux/x86_64/sigaction.c:0 0x7f0aca228082 __libc_start_main ../csu/libc-start.c:308 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <file:///usr/share/doc/gcc-9/README.Bugs> for instructions. make[2]: *** [3rdparty/protobuf/CMakeFiles/libprotobuf.dir/build.make:193:3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/io/zero_copy_stream_impl.cc.o] 错误 1 make[2]: *** 正在等待未完成的任务.... [ 4%] Building CXX object CMakeFiles/ade.dir/3rdparty/ade/ade-0.1.1f/sources/ade/source/subgraphs.cpp.o [ 4%] Building CXX object CMakeFiles/ade.dir/3rdparty/ade/ade-0.1.1f/sources/ade/source/topological_sort.cpp.o during IPA pass: cp /home/z/下载/opencv-4.5.5/3rdparty/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.cc: In member function ‘virtual void google::protobuf::io::ArrayInputStream::BackUp(int)’: /home/z/下载/opencv-4.5.5/3rdparty/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.cc:467:1: internal compiler error: 段错误 467 | } // namespace google | ^ 0x7fe12677e08f ??? /build/glibc-FcRMwW/glibc-2.31/signal/../sysdeps/unix/sysv/linux/x86_64/sigaction.c:0 0x7fe12675f082 __libc_start_main ../csu/libc-start.c:308 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <file:///usr/share/doc/gcc-9/README.Bugs> for instructions. make[2]: *** [3rdparty/protobuf/CMakeFiles/libprotobuf.dir/build.make:206:3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/io/zero_copy_stream_impl_lite.cc.o] 错误 1 make[1]: *** [CMakeFiles/Makefile2:1625:3rdparty/protobuf/CMakeFiles/libprotobuf.dir/all] 错误 2 make[1]: *** 正在等待未完成的任务.... In file included from /usr/include/c++/9/functional:54, from /home/z/下载/opencv-4.5.5/build/3rdparty/ade/ade-0.1.1f/sources/ade/include/ade/metatypes/metatypes.hpp:12, from /home/z/下载/opencv-4.5.5/build/3rdparty/ade/ade-0.1.1f/sources/ade/include/ade/passes/communications.hpp:14, from /home/z/下载/opencv-4.5.5/build/3rdparty/ade/ade-0.1.1f/sources/ade/source/passes/communications.cpp:7: /usr/include/c++/9/tuple: In instantiation of ‘constexpr _Head& std::__get_helper(std::_Tuple_impl<_Idx, _Head, _Tail ...>&) [with long unsigned int __i = 0; _Head = ade::MemoryDescriptorView* const&; _Tail = {}]’: /usr/include/c++/9/tuple:1321:36: required from ‘constexpr std::__tuple_element_t<__i, std::tuple<_Elements ...> >& std::get(std::tuple<_Elements ...>&) [with long unsigned int __i = 0; _Elements = {ade::MemoryDescriptorView* const&}; std::__tuple_element_t<__i, std::tuple<_Elements ...> > = ade::MemoryDescriptorView* const&]’ /usr/include/c++/9/tuple:1673:55: required from ‘std::pair<_T1, _T2>::pair(std::tuple<_Args1 ...>&, std::tuple<_Args2 ...>&, std::_Index_tuple<_Indexes1 ...>, std::_Index_tuple<_Indexes2 ...>) [with _Args1 = {ade::MemoryDescriptorView* const&}; long unsigned int ..._Indexes1 = {0}; _Args2 = {}; long unsigned int ..._Indexes2 = {}; _T1 = ade::MemoryDescriptorView* const; _T2 = {anonymous}::CacheEntry]’ /usr/include/c++/9/tuple:1663:63: required from ‘std::pair<_T1, _T2>::pair(std::piecewise_construct_t, std::tuple<_Args1 ...>, std::tuple<_Args2 ...>) [with _Args1 = {ade::MemoryDescriptorView* const&}; _Args2 = {}; _T1 = ade::MemoryDescriptorView* const; _T2 = {anonymous}::CacheEntry]’ /usr/include/c++/9/ext/new_allocator.h:146:4: required from ‘void __gnu_cxx::new_allocator<_Tp>::construct(_Up*, _Args&& ...) [with _Up = std::pair<ade::MemoryDescriptorView* const, {anonymous}::CacheEntry>; _Args = {const std::piecewise_construct_t&, std::tuple<ade::MemoryDescriptorView* const&>, std::tuple<>}; _Tp = std::__detail::_Hash_node<std::pair<ade::MemoryDescriptorView* const, {anonymous}::CacheEntry>, false>]’ /usr/include/c++/9/bits/alloc_traits.h:483:4: required from ‘static void std::allocator_traits<std::allocator<_CharT> >::construct(std::allocator_traits<std::allocator<_CharT> >::allocator_type&, _Up*, _Args&& ...) [with _Up = std::pair<ade::MemoryDescriptorView* const, {anonymous}::CacheEntry>; _Args = {const std::piecewise_construct_t&, std::tuple<ade::MemoryDescriptorView* const&>, std::tuple<>}; _Tp = std::__detail::_Hash_node<std::pair<ade::MemoryDescriptorView* const, {anonymous}::CacheEntry>, false>; std::allocator_traits<std::allocator<_CharT> >::allocator_type = std::allocator<std::__detail::_Hash_node<std::pair<ade::MemoryDescriptorView* const, {anonymous}::CacheEntry>, false> >]’ /usr/include/c++/9/bits/hashtable_policy.h:2086:36: required from ‘std::__detail::_Hashtable_alloc<_NodeAlloc>::__node_type* std::__detail::_Hashtable_alloc<_NodeAlloc>::_M_allocate_node(_Args&& ...) [with _Args = {const std::piecewise_construct_t&, std::tuple<ade::MemoryDescriptorView* const&>, std::tuple<>}; _NodeAlloc = std::allocator<std::__detail::_Hash_node<std::pair<ade::MemoryDescriptorView* const, {anonymous}::CacheEntry>, false> >; std::__detail::_Hashtable_alloc<_NodeAlloc>::__node_type = std::__detail::_Hash_node<std::pair<ade::MemoryDescriptorView* const, {anonymous}::CacheEntry>, false>]’ /usr/include/c++/9/bits/hashtable_policy.h:701:8: required from ‘std::__detail::_Map_base<_Key, _Pair, _Alloc, std::__detail::_Select1st, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits, true>::mapped_type& std::__detail::_Map_base<_Key, _Pair, _Alloc, std::__detail::_Select1st, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits, true>::operator[](const key_type&) [with _Key = ade::MemoryDescriptorView*; _Pair = std::pair<ade::MemoryDescriptorView* const, {anonymous}::CacheEntry>; _Alloc = std::allocator<std::pair<ade::MemoryDescriptorView* const, {anonymous}::CacheEntry> >; _Equal = std::equal_to<ade::MemoryDescriptorView*>; _H1 = std::hash<ade::MemoryDescriptorView*>; _H2 = std::__detail::_Mod_range_hashing; _Hash = std::__detail::_Default_ranged_hash; _RehashPolicy = std::__detail::_Prime_rehash_policy; _Traits = std::__detail::_Hashtable_traits<false, false, true>; std::__detail::_Map_base<_Key, _Pair, _Alloc, std::__detail::_Select1st, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits, true>::mapped_type = {anonymous}::CacheEntry; std::__detail::_Map_base<_Key, _Pair, _Alloc, std::__detail::_Select1st, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits, true>::key_type = ade::MemoryDescriptorView*]’ /usr/include/c++/9/bits/unordered_map.h:986:20: required from ‘std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::mapped_type& std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::operator[](const key_type&) [with _Key = ade::MemoryDescriptorView*; _Tp = {anonymous}::CacheEntry; _Hash = std::hash<ade::MemoryDescriptorView*>; _Pred = std::equal_to<ade::MemoryDescriptorView*>; _Alloc = std::allocator<std::pair<ade::MemoryDescriptorView* const, {anonymous}::CacheEntry> >; std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::mapped_type = {anonymous}::CacheEntry; std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::key_type = ade::MemoryDescriptorView*]’ /home/z/下载/opencv-4.5.5/build/3rdparty/ade/ade-0.1.1f/sources/ade/source/passes/communications.cpp:91:22: required from here /usr/include/c++/9/tuple:1310:56: in ‘constexpr’ expansion of ‘std::_Tuple_impl<0, ade::MemoryDescriptorView* const&>::_M_head(__t)’ /usr/include/c++/9/tuple:1310:60: internal compiler error: 段错误 1310 | { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); } | ^ 0x7f7630e1a08f ??? /build/glibc-FcRMwW/glibc-2.31/signal/../sysdeps/unix/sysv/linux/x86_64/sigaction.c:0 0x7f7630dfb082 __libc_start_main ../csu/libc-start.c:308 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <file:///usr/share/doc/gcc-9/README.Bugs> for instructions. make[2]: *** [CMakeFiles/ade.dir/build.make:232:CMakeFiles/ade.dir/3rdparty/ade/ade-0.1.1f/sources/ade/source/passes/communications.cpp.o] 错误 1 make[2]: *** 正在等待未完成的任务.... make[1]: *** [CMakeFiles/Makefile2:1801:modules/core/CMakeFiles/opencv_core.dir/all] 错误 2 make[1]: *** [CMakeFiles/Makefile2:1465:CMakeFiles/ade.dir/all] 错误 2 make: *** [Makefile:163:all] 错误 2
06-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值