fuzziqersoftware / phosg

C++ helpers for some common tasks
18 stars 17 forks source link

Build error in Ubuntu on Pi4 (possibly other ARM SBCs) #16

Closed PalasX closed 1 year ago

PalasX commented 1 year ago

Soltuion: add this line to cmakelist.txt right under Project phosg: set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -latomic")

Error: [ 37%] Linking CXX executable ToolsTest /usr/bin/ld: CMakeFiles/ToolsTest.dir/src/ToolsTest.cc.o: in function void parallel_range_thread_fn(std::function<bool (unsigned long long, unsigned int)>&, std::atomic&, std::atomic&, unsigned long long, unsigned int)': /usr/include/c++/8/bits/atomic_base.h:514: undefined reference to __atomic_fetch_add_8' /usr/bin/ld: CMakeFiles/ToolsTest.dir/src/ToolsTest.cc.o: in function std::atomic_base::operator unsigned long long() const': /usr/include/c++/8/bits/atomic_base.h:396: undefined reference to atomic_load_8' /usr/bin/ld: CMakeFiles/ToolsTest.dir/src/ToolsTest.cc.o: in function std::atomic_base::operator=(unsigned long long)': /usr/include/c++/8/bits/atomic_base.h:374: undefined reference to atomic_store_8' collect2: error: ld returned 1 exit status make[2]: [CMakeFiles/ToolsTest.dir/build.make:85: ToolsTest] Error 1 make[1]: [CMakeFiles/Makefile2:133: CMakeFiles/ToolsTest.dir/all] Error 2 make: *** [Makefile:141: all] Error 2

fuzziqersoftware commented 1 year ago

This might be fixed now - I pushed a change that should add the atomic library if it exists, but I can't test it in the same environment as you have because I don't have a Raspberry Pi. Let me know it still doesn't work.

PalasX commented 1 year ago

deleted everything, did a fresh clone, same result:

Scanning dependencies of target ToolsTest
[ 65%] Building CXX object CMakeFiles/ToolsTest.dir/src/ToolsTest.cc.o
[ 67%] Linking CXX executable ToolsTest
/usr/bin/ld: CMakeFiles/ToolsTest.dir/src/ToolsTest.cc.o: in function `std::__atomic_base<unsigned long long>::fetch_add(unsigned long long, std::memory_order)':
/usr/include/c++/10/bits/atomic_base.h:548: undefined reference to `__atomic_fetch_add_8'
/usr/bin/ld: CMakeFiles/ToolsTest.dir/src/ToolsTest.cc.o: in function `std::__atomic_base<unsigned long long>::load(std::memory_order) const':
/usr/include/c++/10/bits/atomic_base.h:426: undefined reference to `__atomic_load_8'
/usr/bin/ld: CMakeFiles/ToolsTest.dir/src/ToolsTest.cc.o: in function `std::__atomic_base<unsigned long long>::store(unsigned long long, std::memory_order)':
/usr/include/c++/10/bits/atomic_base.h:404: undefined reference to `__atomic_store_8'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/ToolsTest.dir/build.make:104: ToolsTest] Error 1
make[1]: *** [CMakeFiles/Makefile2:341: CMakeFiles/ToolsTest.dir/all] Error 2
make: *** [Makefile:160: all] Error 2

Gcc 10 this time, rasbian "bullseye" / deb 11.

pi@RasPi4Osoyoo:~/programs/phosg $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 11 (bullseye)
Release:        11
Codename:       bullseye
pi@RasPi4Osoyoo:~/programs/phosg $ gcc --version
gcc (Raspbian 10.2.1-6+rpi1) 10.2.1 20210110
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
pi@RasPi4Osoyoo:~/programs/phosg $ sudo apt-get install libatomic1
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
libatomic1 is already the newest version (10.2.1-6+rpi1).

and the previous "fix" no longer works. editing the cmakelist.txt on a fresh git clone gives same result on make.

Similar issue? https://github.com/redis/redis/issues/6275#issuecomment-559002409


+# Linux ARM needs -latomic at linking time
+ifneq (,$(filter aarch64 armv,$(uname_M)))
+        FINAL_LIBS+=-latomic
+else
+ifneq (,$(findstring armv,$(uname_M)))
+        FINAL_LIBS+=-latomic
+endif
+endif
+

This works in CMakeList.txt, manually forcing -latomic for toolstest.cc:

add_executable(ToolsTest src/ToolsTest.cc)
target_link_libraries(ToolsTest phosg -latomic)
fuzziqersoftware commented 1 year ago

Yeah, that looks like the same issue. Redis unfortunately uses a raw Makefile, so I've attempted to implement the same logic in phosg's CMakeLists; pushed it just now.

PalasX commented 1 year ago

did a git hard reset and it compiled correctly without having to use -latomic:

pi@RasPi4Osoyoo:~/programs/phosg $ git reset --hard
HEAD is now at c45bc9d use architecture var to decide whether to add libatomic dependency
pi@RasPi4Osoyoo:~/programs/phosg $ cmake .
-- The C compiler identification is GNU 10.2.1
-- The CXX compiler identification is GNU 10.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Target architecture is armv7l
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pi/programs/phosg
pi@RasPi4Osoyoo:~/programs/phosg $ make
Scanning dependencies of target phosg
[  2%] Building CXX object CMakeFiles/phosg.dir/src/Encoding.cc.o
[  4%] Building CXX object CMakeFiles/phosg.dir/src/Filesystem.cc.o
[  6%] Building CXX object CMakeFiles/phosg.dir/src/Hash.cc.o
[  9%] Building CXX object CMakeFiles/phosg.dir/src/Image.cc.o
In file included from /usr/include/c++/10/unordered_map:47,
                 from /usr/include/c++/10/functional:61,
                 from /home/pi/programs/phosg/src/Image.hh:6,
                 from /home/pi/programs/phosg/src/Image.cc:1:
/usr/include/c++/10/bits/unordered_map.h: In constructor ‘std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::unordered_map(std::initializer_list<typename std::_Hashtable<_Key, std::pair<const _Key, _Tp>, _Alloc, std::__detail::_Select1st, _Pred, _Hash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<std::__not_<std::__and_<std::__is_fast_hash<_Hash>, std::__is_nothrow_invocable<const _Hash&, const _Key&> > >::value, false, true> >::value_type>, std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::size_type, const hasher&, const key_equal&, const allocator_type&) [with _Key = unsigned char; _Tp = long long unsigned int; _Hash = std::hash<unsigned char>; _Pred = std::equal_to<unsigned char>; _Alloc = std::allocator<std::pair<const unsigned char, long long unsigned int> >]’:
/usr/include/c++/10/bits/unordered_map.h:226:7: note: parameter passing for argument of type ‘std::initializer_list<std::pair<const unsigned char, long long unsigned int> >’ changed in GCC 7.1
  226 |       unordered_map(initializer_list<value_type> __l,
      |       ^~~~~~~~~~~~~
/usr/include/c++/10/bits/unordered_map.h:231:40: note: parameter passing for argument of type ‘std::initializer_list<std::pair<const unsigned char, long long unsigned int> >’ changed in GCC 7.1
  231 |       : _M_h(__l, __n, __hf, __eql, __a)
      |                                        ^
In file included from /usr/include/c++/10/unordered_map:46,
                 from /usr/include/c++/10/functional:61,
                 from /home/pi/programs/phosg/src/Image.hh:6,
                 from /home/pi/programs/phosg/src/Image.cc:1:
/usr/include/c++/10/bits/hashtable.h: In constructor ‘std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::_Hashtable(std::initializer_list<_Up>, std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::size_type, const _H1&, const key_equal&, const allocator_type&) [with _Key = unsigned char; _Value = std::pair<const unsigned char, long long unsigned int>; _Alloc = std::allocator<std::pair<const unsigned char, long long unsigned int> >; _ExtractKey = std::__detail::_Select1st; _Equal = std::equal_to<unsigned char>; _H1 = std::hash<unsigned char>; _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>]’:
/usr/include/c++/10/bits/hashtable.h:497:7: note: parameter passing for argument of type ‘std::initializer_list<std::pair<const unsigned char, long long unsigned int> >’ changed in GCC 7.1
  497 |       _Hashtable(initializer_list<value_type> __l,
      |       ^~~~~~~~~~
/home/pi/programs/phosg/src/Image.cc: In function ‘void __static_initialization_and_destruction_0(int, int)’:
/home/pi/programs/phosg/src/Image.cc:299:2: note: parameter passing for argument of type ‘std::initializer_list<std::pair<const unsigned char, long long unsigned int> >’ changed in GCC 7.1
  299 | });
      |  ^
[ 11%] Building CXX object CMakeFiles/phosg.dir/src/JSON.cc.o
[ 13%] Building CXX object CMakeFiles/phosg.dir/src/Network.cc.o
[ 16%] Building CXX object CMakeFiles/phosg.dir/src/Process.cc.o
[ 18%] Building CXX object CMakeFiles/phosg.dir/src/Random.cc.o
[ 20%] Building CXX object CMakeFiles/phosg.dir/src/Strings.cc.o
[ 23%] Building CXX object CMakeFiles/phosg.dir/src/Time.cc.o
[ 25%] Building CXX object CMakeFiles/phosg.dir/src/Tools.cc.o
[ 27%] Building CXX object CMakeFiles/phosg.dir/src/UnitTest.cc.o
[ 30%] Linking CXX static library libphosg.a
[ 30%] Built target phosg
Scanning dependencies of target UnitTestTest
[ 32%] Building CXX object CMakeFiles/UnitTestTest.dir/src/UnitTestTest.cc.o
[ 34%] Linking CXX executable UnitTestTest
[ 34%] Built target UnitTestTest
Scanning dependencies of target TimeTest
[ 37%] Building CXX object CMakeFiles/TimeTest.dir/src/TimeTest.cc.o
[ 39%] Linking CXX executable TimeTest
[ 39%] Built target TimeTest
Scanning dependencies of target StringsTest
[ 41%] Building CXX object CMakeFiles/StringsTest.dir/src/StringsTest.cc.o
[ 44%] Linking CXX executable StringsTest
[ 44%] Built target StringsTest
Scanning dependencies of target FilesystemTest
[ 46%] Building CXX object CMakeFiles/FilesystemTest.dir/src/FilesystemTest.cc.o
[ 48%] Linking CXX executable FilesystemTest
[ 48%] Built target FilesystemTest
Scanning dependencies of target jsonformat
[ 51%] Building CXX object CMakeFiles/jsonformat.dir/src/JSONFormat.cc.o
[ 53%] Linking CXX executable jsonformat
[ 53%] Built target jsonformat
Scanning dependencies of target parse-data
[ 55%] Building CXX object CMakeFiles/parse-data.dir/src/ParseData.cc.o
[ 58%] Linking CXX executable parse-data
[ 58%] Built target parse-data
Scanning dependencies of target EncodingTest
[ 60%] Building CXX object CMakeFiles/EncodingTest.dir/src/EncodingTest.cc.o
[ 62%] Linking CXX executable EncodingTest
[ 62%] Built target EncodingTest
Scanning dependencies of target ToolsTest
[ 65%] Building CXX object CMakeFiles/ToolsTest.dir/src/ToolsTest.cc.o
[ 67%] Linking CXX executable ToolsTest
[ 67%] Built target ToolsTest
Scanning dependencies of target HashTest
[ 69%] Building CXX object CMakeFiles/HashTest.dir/src/HashTest.cc.o
[ 72%] Linking CXX executable HashTest
[ 72%] Built target HashTest
Scanning dependencies of target ImageTest
[ 74%] Building CXX object CMakeFiles/ImageTest.dir/src/ImageTest.cc.o
[ 76%] Linking CXX executable ImageTest
[ 76%] Built target ImageTest
Scanning dependencies of target JSONTest
[ 79%] Building CXX object CMakeFiles/JSONTest.dir/src/JSONTest.cc.o
/home/pi/programs/phosg/src/JSONTest.cc: In function ‘int main(int, char**)’:
/home/pi/programs/phosg/src/JSONTest.cc:29:118: note: parameter passing for argument of type ‘std::initializer_list<JSONObject>’ changed in GCC 7.1
   29 | ers.emplace(piecewise_construct, make_tuple("list1"), make_tuple((vector<JSONObject>({{JSONObject((int64_t)1)}}))));
      |                                                                                                                ^

/home/pi/programs/phosg/src/JSONTest.cc:31:138: note: parameter passing for argument of type ‘std::initializer_list<std::pair<const std::__cxx11::basic_string<char>, JSONObject> >’ changed in GCC 7.1
   31 | e_construct, make_tuple("dict1"), make_tuple((unordered_map<string, JSONObject>({{"1", JSONObject((int64_t)1)}}))));
      |                                                                                                                ^

In file included from /home/pi/programs/phosg/src/JSONTest.cc:1:
/home/pi/programs/phosg/src/JSONTest.cc:76:88: note: parameter passing for argument of type ‘std::initializer_list<JSONObject>’ changed in GCC 7.1
   76 |   assert(*root.at("list1") == JSONObject((vector<JSONObject>({{JSONObject((int64_t)1)}}))));
      |                                                                                        ^
/home/pi/programs/phosg/src/JSONTest.cc:79:107: note: parameter passing for argument of type ‘std::initializer_list<std::pair<const std::__cxx11::basic_string<char>, JSONObject> >’ changed in GCC 7.1
   79 |   assert(*root.at("dict1") == JSONObject(unordered_map<string, JSONObject>({{"1", JSONObject((int64_t)1)}})));
      |                                                                                                           ^
In file included from /usr/include/c++/10/vector:67,
                 from /home/pi/programs/phosg/src/JSON.hh:9,
                 from /home/pi/programs/phosg/src/JSONTest.cc:7:
/usr/include/c++/10/bits/stl_vector.h: In constructor ‘std::vector<_Tp, _Alloc>::vector(std::initializer_list<_Tp>, const allocator_type&) [with _Tp = JSONObject; _Alloc = std::allocator<JSONObject>]’:
/usr/include/c++/10/bits/stl_vector.h:625:7: note: parameter passing for argument of type ‘std::initializer_list<JSONObject>’ changed in GCC 7.1
  625 |       vector(initializer_list<value_type> __l,
      |       ^~~~~~
In file included from /usr/include/c++/10/unordered_map:47,
                 from /home/pi/programs/phosg/src/JSON.hh:7,
                 from /home/pi/programs/phosg/src/JSONTest.cc:7:
/usr/include/c++/10/bits/unordered_map.h: In constructor ‘std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::unordered_map(std::initializer_list<typename std::_Hashtable<_Key, std::pair<const _Key, _Tp>, _Alloc, std::__detail::_Select1st, _Pred, _Hash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<std::__not_<std::__and_<std::__is_fast_hash<_Hash>, std::__is_nothrow_invocable<const _Hash&, const _Key&> > >::value, false, true> >::value_type>, std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::size_type, const hasher&, const key_equal&, const allocator_type&) [with _Key = std::__cxx11::basic_string<char>; _Tp = JSONObject; _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>, JSONObject> >]’:
/usr/include/c++/10/bits/unordered_map.h:226:7: note: parameter passing for argument of type ‘std::initializer_list<std::pair<const std::__cxx11::basic_string<char>, JSONObject> >’ changed in GCC 7.1
  226 |       unordered_map(initializer_list<value_type> __l,
      |       ^~~~~~~~~~~~~
/usr/include/c++/10/bits/unordered_map.h:231:40: note: parameter passing for argument of type ‘std::initializer_list<std::pair<const std::__cxx11::basic_string<char>, JSONObject> >’ changed in GCC 7.1
  231 |       : _M_h(__l, __n, __hf, __eql, __a)
      |                                        ^
In file included from /usr/include/c++/10/unordered_map:46,
                 from /home/pi/programs/phosg/src/JSON.hh:7,
                 from /home/pi/programs/phosg/src/JSONTest.cc:7:
/usr/include/c++/10/bits/hashtable.h: In constructor ‘std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::_Hashtable(std::initializer_list<_Up>, std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits>::size_type, const _H1&, const key_equal&, const allocator_type&) [with _Key = std::__cxx11::basic_string<char>; _Value = std::pair<const std::__cxx11::basic_string<char>, JSONObject>; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, JSONObject> >; _ExtractKey = std::__detail::_Select1st; _Equal = std::equal_to<std::__cxx11::basic_string<char> >; _H1 = std::hash<std::__cxx11::basic_string<char> >; _H2 = std::__detail::_Mod_range_hashing; _Hash = std::__detail::_Default_ranged_hash; _RehashPolicy = std::__detail::_Prime_rehash_policy; _Traits = std::__detail::_Hashtable_traits<true, false, true>]’:
/usr/include/c++/10/bits/hashtable.h:497:7: note: parameter passing for argument of type ‘std::initializer_list<std::pair<const std::__cxx11::basic_string<char>, JSONObject> >’ changed in GCC 7.1
  497 |       _Hashtable(initializer_list<value_type> __l,
      |       ^~~~~~~~~~
[ 81%] Linking CXX executable JSONTest
[ 81%] Built target JSONTest
Scanning dependencies of target ProcessTest
[ 83%] Building CXX object CMakeFiles/ProcessTest.dir/src/ProcessTest.cc.o
[ 86%] Linking CXX executable ProcessTest
[ 86%] Built target ProcessTest
Scanning dependencies of target KDTreeTest
[ 88%] Building CXX object CMakeFiles/KDTreeTest.dir/src/KDTreeTest.cc.o
/home/pi/programs/phosg/src/KDTreeTest.cc: In function ‘void run_basic_test()’:
/home/pi/programs/phosg/src/KDTreeTest.cc:127:4: note: parameter passing for argument of type ‘std::initializer_list<run_basic_test()::Entry>’ changed in GCC 7.1
  127 |   });
      |    ^
/home/pi/programs/phosg/src/KDTreeTest.cc:168:64: note: parameter passing for argument of type ‘__gnu_cxx::__normal_iterator<const run_basic_test()::Entry*, std::vector<run_basic_test()::Entry> >’ changed in GCC 7.1
  168 |     set<Entry> remaining_entries(entries.begin(), entries.end());
      |                                                                ^
/home/pi/programs/phosg/src/KDTreeTest.cc:178:64: note: parameter passing for argument of type ‘__gnu_cxx::__normal_iterator<const run_basic_test()::Entry*, std::vector<run_basic_test()::Entry> >’ changed in GCC 7.1
  178 |     set<Entry> remaining_entries(entries.begin(), entries.end());
      |                                                                ^
/home/pi/programs/phosg/src/KDTreeTest.cc:193:64: note: parameter passing for argument of type ‘__gnu_cxx::__normal_iterator<const run_basic_test()::Entry*, std::vector<run_basic_test()::Entry> >’ changed in GCC 7.1
  193 |     set<Entry> remaining_entries(entries.begin(), entries.end());
      |                                                                ^
In file included from /usr/include/c++/10/vector:67,
                 from /home/pi/programs/phosg/src/KDTree.hh:8,
                 from /home/pi/programs/phosg/src/KDTreeTest.cc:1:
/usr/include/c++/10/bits/stl_vector.h: In constructor ‘std::vector<_Tp, _Alloc>::vector(std::initializer_list<_Tp>, const allocator_type&) [with _Tp = run_basic_test()::Entry; _Alloc = std::allocator<run_basic_test()::Entry>]’:
/usr/include/c++/10/bits/stl_vector.h:625:7: note: parameter passing for argument of type ‘std::initializer_list<run_basic_test()::Entry>’ changed in GCC 7.1
  625 |       vector(initializer_list<value_type> __l,
      |       ^~~~~~
In file included from /usr/include/c++/10/set:61,
                 from /home/pi/programs/phosg/src/KDTreeTest.cc:8:
/usr/include/c++/10/bits/stl_set.h: In constructor ‘std::set<_Key, _Compare, _Alloc>::set(_InputIterator, _InputIterator) [with _InputIterator = __gnu_cxx::__normal_iterator<const run_basic_test()::Entry*, std::vector<run_basic_test()::Entry> >; _Key = run_basic_test()::Entry; _Compare = std::less<run_basic_test()::Entry>; _Alloc = std::allocator<run_basic_test()::Entry>]’:
/usr/include/c++/10/bits/stl_set.h:191:2: note: parameter passing for argument of type ‘__gnu_cxx::__normal_iterator<const run_basic_test()::Entry*, std::vector<run_basic_test()::Entry> >’ changed in GCC 7.1
  191 |  set(_InputIterator __first, _InputIterator __last)
      |  ^~~
/usr/include/c++/10/bits/stl_set.h:191:2: note: parameter passing for argument of type ‘__gnu_cxx::__normal_iterator<const run_basic_test()::Entry*, std::vector<run_basic_test()::Entry> >’ changed in GCC 7.1
/usr/include/c++/10/bits/stl_set.h:193:31: note: parameter passing for argument of type ‘__gnu_cxx::__normal_iterator<const run_basic_test()::Entry*, std::vector<run_basic_test()::Entry> >’ changed in GCC 7.1
  193 |  { _M_t._M_insert_range_unique(__first, __last); }
      |    ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/10/vector:72,
                 from /home/pi/programs/phosg/src/KDTree.hh:8,
                 from /home/pi/programs/phosg/src/KDTreeTest.cc:1:
/usr/include/c++/10/bits/vector.tcc: In member function ‘std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {std::pair<Vector2<long long int>, long long int>}; _Tp = std::pair<Vector2<long long int>, long long int>; _Alloc = std::allocator<std::pair<Vector2<long long int>, long long int> >]’:
/usr/include/c++/10/bits/vector.tcc:121:21: note: parameter passing for argument of type ‘__gnu_cxx::__normal_iterator<std::pair<Vector2<long long int>, long long int>*, std::vector<std::pair<Vector2<long long int>, long long int>, std::allocator<std::pair<Vector2<long long int>, long long int> > > >’ changed in GCC 7.1
  121 |    _M_realloc_insert(end(), std::forward<_Args>(__args)...);
      |    ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/10/map:60,
                 from /home/pi/programs/phosg/src/KDTree-inl.hh:5,
                 from /home/pi/programs/phosg/src/KDTree.hh:99,
                 from /home/pi/programs/phosg/src/KDTreeTest.cc:1:
/usr/include/c++/10/bits/stl_tree.h: In member function ‘std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::erase(const _Key&) [with _Key = std::pair<long long int, long long int>; _Val = std::pair<long long int, long long int>; _KeyOfValue = std::_Identity<std::pair<long long int, long long int> >; _Compare = std::less<std::pair<long long int, long long int> >; _Alloc = std::allocator<std::pair<long long int, long long int> >]’:
/usr/include/c++/10/bits/stl_tree.h:2542:19: note: parameter passing for argument of type ‘std::_Rb_tree<std::pair<long long int, long long int>, std::pair<long long int, long long int>, std::_Identity<std::pair<long long int, long long int> >, std::less<std::pair<long long int, long long int> >, std::allocator<std::pair<long long int, long long int> > >::const_iterator’ changed in GCC 7.1
 2542 |       _M_erase_aux(__p.first, __p.second);
      |       ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/10/bits/stl_tree.h: In member function ‘std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::erase(const _Key&) [with _Key = run_basic_test()::Entry; _Val = run_basic_test()::Entry; _KeyOfValue = std::_Identity<run_basic_test()::Entry>; _Compare = std::less<run_basic_test()::Entry>; _Alloc = std::allocator<run_basic_test()::Entry>]’:
/usr/include/c++/10/bits/stl_tree.h:2542:19: note: parameter passing for argument of type ‘std::_Rb_tree<run_basic_test()::Entry, run_basic_test()::Entry, std::_Identity<run_basic_test()::Entry>, std::less<run_basic_test()::Entry>, std::allocator<run_basic_test()::Entry> >::const_iterator’ changed in GCC 7.1
 2542 |       _M_erase_aux(__p.first, __p.second);
      |       ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/10/bits/stl_tree.h: In member function ‘std::__enable_if_t<std::is_same<_Val, typename std::iterator_traits<_InputIterator>::value_type>::value> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_insert_range_unique(_InputIterator, _InputIterator) [with _InputIterator = __gnu_cxx::__normal_iterator<const run_basic_test()::Entry*, std::vector<run_basic_test()::Entry> >; _Key = run_basic_test()::Entry; _Val = run_basic_test()::Entry; _KeyOfValue = std::_Identity<run_basic_test()::Entry>; _Compare = std::less<run_basic_test()::Entry>; _Alloc = std::allocator<run_basic_test()::Entry>]’:
/usr/include/c++/10/bits/stl_tree.h:1105:2: note: parameter passing for argument of type ‘__gnu_cxx::__normal_iterator<const run_basic_test()::Entry*, std::vector<run_basic_test()::Entry> >’ changed in GCC 7.1
 1105 |  _M_insert_range_unique(_InputIterator __first, _InputIterator __last)
      |  ^~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/10/bits/stl_tree.h:1105:2: note: parameter passing for argument of type ‘__gnu_cxx::__normal_iterator<const run_basic_test()::Entry*, std::vector<run_basic_test()::Entry> >’ changed in GCC 7.1
/usr/include/c++/10/bits/stl_tree.h:1109:23: note: parameter passing for argument of type ‘std::_Rb_tree<run_basic_test()::Entry, run_basic_test()::Entry, std::_Identity<run_basic_test()::Entry>, std::less<run_basic_test()::Entry>, std::allocator<run_basic_test()::Entry> >::const_iterator’ changed in GCC 7.1
 1109 |      _M_insert_unique_(end(), *__first, __an);
      |      ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/10/vector:72,
                 from /home/pi/programs/phosg/src/KDTree.hh:8,
                 from /home/pi/programs/phosg/src/KDTreeTest.cc:1:
/usr/include/c++/10/bits/vector.tcc: In member function ‘void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {std::pair<Vector2<long long int>, long long int>}; _Tp = std::pair<Vector2<long long int>, long long int>; _Alloc = std::allocator<std::pair<Vector2<long long int>, long long int> >]’:
/usr/include/c++/10/bits/vector.tcc:426:7: note: parameter passing for argument of type ‘std::vector<std::pair<Vector2<long long int>, long long int>, std::allocator<std::pair<Vector2<long long int>, long long int> > >::iterator’ changed in GCC 7.1
  426 |       vector<_Tp, _Alloc>::
      |       ^~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/10/map:60,
                 from /home/pi/programs/phosg/src/KDTree-inl.hh:5,
                 from /home/pi/programs/phosg/src/KDTree.hh:99,
                 from /home/pi/programs/phosg/src/KDTreeTest.cc:1:
/usr/include/c++/10/bits/stl_tree.h: In member function ‘void std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_erase_aux(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator, std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator) [with _Key = std::pair<long long int, long long int>; _Val = std::pair<long long int, long long int>; _KeyOfValue = std::_Identity<std::pair<long long int, long long int> >; _Compare = std::less<std::pair<long long int, long long int> >; _Alloc = std::allocator<std::pair<long long int, long long int> >]’:
/usr/include/c++/10/bits/stl_tree.h:2524:5: note: parameter passing for argument of type ‘std::_Rb_tree<std::pair<long long int, long long int>, std::pair<long long int, long long int>, std::_Identity<std::pair<long long int, long long int> >, std::less<std::pair<long long int, long long int> >, std::allocator<std::pair<long long int, long long int> > >::const_iterator’ changed in GCC 7.1
 2524 |     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/10/bits/stl_tree.h:2524:5: note: parameter passing for argument of type ‘std::_Rb_tree<std::pair<long long int, long long int>, std::pair<long long int, long long int>, std::_Identity<std::pair<long long int, long long int> >, std::less<std::pair<long long int, long long int> >, std::allocator<std::pair<long long int, long long int> > >::const_iterator’ changed in GCC 7.1
/usr/include/c++/10/bits/stl_tree.h:2531:16: note: parameter passing for argument of type ‘std::_Rb_tree_const_iterator<std::pair<long long int, long long int> >’ changed in GCC 7.1
 2531 |    _M_erase_aux(__first++);
      |    ~~~~~~~~~~~~^~~~~~~~~~~
/usr/include/c++/10/bits/stl_tree.h: In member function ‘void std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_erase_aux(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator, std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator) [with _Key = run_basic_test()::Entry; _Val = run_basic_test()::Entry; _KeyOfValue = std::_Identity<run_basic_test()::Entry>; _Compare = std::less<run_basic_test()::Entry>; _Alloc = std::allocator<run_basic_test()::Entry>]’:
/usr/include/c++/10/bits/stl_tree.h:2524:5: note: parameter passing for argument of type ‘std::_Rb_tree<run_basic_test()::Entry, run_basic_test()::Entry, std::_Identity<run_basic_test()::Entry>, std::less<run_basic_test()::Entry>, std::allocator<run_basic_test()::Entry> >::const_iterator’ changed in GCC 7.1
 2524 |     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/10/bits/stl_tree.h:2524:5: note: parameter passing for argument of type ‘std::_Rb_tree<run_basic_test()::Entry, run_basic_test()::Entry, std::_Identity<run_basic_test()::Entry>, std::less<run_basic_test()::Entry>, std::allocator<run_basic_test()::Entry> >::const_iterator’ changed in GCC 7.1
/usr/include/c++/10/bits/stl_tree.h:2531:16: note: parameter passing for argument of type ‘std::_Rb_tree_const_iterator<run_basic_test()::Entry>’ changed in GCC 7.1
 2531 |    _M_erase_aux(__first++);
      |    ~~~~~~~~~~~~^~~~~~~~~~~
/usr/include/c++/10/bits/stl_tree.h: In member function ‘std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_insert_unique_(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator, _Arg&&, _NodeGen&) [with _Arg = const run_basic_test()::Entry&; _NodeGen = std::_Rb_tree<run_basic_test()::Entry, run_basic_test()::Entry, std::_Identity<run_basic_test()::Entry>, std::less<run_basic_test()::Entry>, std::allocator<run_basic_test()::Entry> >::_Alloc_node; _Key = run_basic_test()::Entry; _Val = run_basic_test()::Entry; _KeyOfValue = std::_Identity<run_basic_test()::Entry>; _Compare = std::less<run_basic_test()::Entry>; _Alloc = std::allocator<run_basic_test()::Entry>]’:
/usr/include/c++/10/bits/stl_tree.h:2254:7: note: parameter passing for argument of type ‘std::_Rb_tree<run_basic_test()::Entry, run_basic_test()::Entry, std::_Identity<run_basic_test()::Entry>, std::less<run_basic_test()::Entry>, std::allocator<run_basic_test()::Entry> >::const_iterator’ changed in GCC 7.1
 2254 |       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/10/bits/stl_tree.h: In member function ‘void std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_erase_aux(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator) [with _Key = std::pair<long long int, long long int>; _Val = std::pair<long long int, long long int>; _KeyOfValue = std::_Identity<std::pair<long long int, long long int> >; _Compare = std::less<std::pair<long long int, long long int> >; _Alloc = std::allocator<std::pair<long long int, long long int> >]’:
/usr/include/c++/10/bits/stl_tree.h:2510:5: note: parameter passing for argument of type ‘std::_Rb_tree<std::pair<long long int, long long int>, std::pair<long long int, long long int>, std::_Identity<std::pair<long long int, long long int> >, std::less<std::pair<long long int, long long int> >, std::allocator<std::pair<long long int, long long int> > >::const_iterator’ changed in GCC 7.1
 2510 |     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/10/bits/stl_tree.h: In member function ‘void std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_erase_aux(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator) [with _Key = run_basic_test()::Entry; _Val = run_basic_test()::Entry; _KeyOfValue = std::_Identity<run_basic_test()::Entry>; _Compare = std::less<run_basic_test()::Entry>; _Alloc = std::allocator<run_basic_test()::Entry>]’:
/usr/include/c++/10/bits/stl_tree.h:2510:5: note: parameter passing for argument of type ‘std::_Rb_tree<run_basic_test()::Entry, run_basic_test()::Entry, std::_Identity<run_basic_test()::Entry>, std::less<run_basic_test()::Entry>, std::allocator<run_basic_test()::Entry> >::const_iterator’ changed in GCC 7.1
/usr/include/c++/10/bits/stl_tree.h: In member function ‘std::pair<std::_Rb_tree_node_base*, std::_Rb_tree_node_base*> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_get_insert_hint_unique_pos(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator, const key_type&) [with _Key = run_basic_test()::Entry; _Val = run_basic_test()::Entry; _KeyOfValue = std::_Identity<run_basic_test()::Entry>; _Compare = std::less<run_basic_test()::Entry>; _Alloc = std::allocator<run_basic_test()::Entry>]’:
/usr/include/c++/10/bits/stl_tree.h:2193:5: note: parameter passing for argument of type ‘std::_Rb_tree<run_basic_test()::Entry, run_basic_test()::Entry, std::_Identity<run_basic_test()::Entry>, std::less<run_basic_test()::Entry>, std::allocator<run_basic_test()::Entry> >::const_iterator’ changed in GCC 7.1
 2193 |     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 90%] Linking CXX executable KDTreeTest
[ 90%] Built target KDTreeTest
Scanning dependencies of target LRUSetTest
[ 93%] Building CXX object CMakeFiles/LRUSetTest.dir/src/LRUSetTest.cc.o
[ 95%] Linking CXX executable LRUSetTest
[ 95%] Built target LRUSetTest
Scanning dependencies of target LRUMapTest
[ 97%] Building CXX object CMakeFiles/LRUMapTest.dir/src/LRUMapTest.cc.o
[100%] Linking CXX executable LRUMapTest
[100%] Built target LRUMapTest
pi@RasPi4Osoyoo:~/programs/phosg $