Platforma embedded kompiluje na procesor aarch64 , gcc 9.5 dziala ale eksperymentalnie chcialem skompilowac projekt na clang-12 , niestety utknąłem.
Wyizolowałem problem do takiego kawałka kodu 1.cpp
wystarczy jeden include valarray
oraz -std=gnu++17
.
#include <valarray> // valarray
void aa()
{
}
buduje kompiluje tak
/opt/tdx-xwayland/5.7.2/sysroots/x86_64-tdxsdk-linux/usr/bin/aarch64-tdx-linux/aarch64-tdx-linux-clang++ \
--sysroot=/opt/tdx-xwayland/5.7.2/sysroots/aarch64-tdx-linux \
-std=gnu++17 \
-c 1.cpp
bledy:
In file included from 1.cpp:1:
/opt/tdx-xwayland/5.7.2/sysroots/aarch64-tdx-linux/usr/lib/aarch64-tdx-linux/9.5.0/../../../include/c++/9.5.0/valarray:1214:5: error: exception specification in declaration does not match previous declaration
begin(valarray<_Tp>& __va) noexcept
^
/opt/tdx-xwayland/5.7.2/sysroots/aarch64-tdx-linux/usr/lib/aarch64-tdx-linux/9.5.0/../../../include/c++/9.5.0/bits/range_access.h:104:31: note: previous declaration is here
template<typename _Tp> _Tp* begin(valarray<_Tp>&);
^
In file included from 1.cpp:1:
/opt/tdx-xwayland/5.7.2/sysroots/aarch64-tdx-linux/usr/lib/aarch64-tdx-linux/9.5.0/../../../include/c++/9.5.0/valarray:1224:5: error: exception specification in declaration does not match previous declaration
begin(const valarray<_Tp>& __va) noexcept
^
/opt/tdx-xwayland/5.7.2/sysroots/aarch64-tdx-linux/usr/lib/aarch64-tdx-linux/9.5.0/../../../include/c++/9.5.0/bits/range_access.h:105:37: note: previous declaration is here
template<typename _Tp> const _Tp* begin(const valarray<_Tp>&);
^
In file included from 1.cpp:1:
/opt/tdx-xwayland/5.7.2/sysroots/aarch64-tdx-linux/usr/lib/aarch64-tdx-linux/9.5.0/../../../include/c++/9.5.0/valarray:1234:5: error: exception specification in declaration does not match previous declaration
end(valarray<_Tp>& __va) noexcept
^
/opt/tdx-xwayland/5.7.2/sysroots/aarch64-tdx-linux/usr/lib/aarch64-tdx-linux/9.5.0/../../../include/c++/9.5.0/bits/range_access.h:106:31: note: previous declaration is here
template<typename _Tp> _Tp* end(valarray<_Tp>&);
^
In file included from 1.cpp:1:
/opt/tdx-xwayland/5.7.2/sysroots/aarch64-tdx-linux/usr/lib/aarch64-tdx-linux/9.5.0/../../../include/c++/9.5.0/valarray:1249:5: error: exception specification in declaration does not match previous declaration
end(const valarray<_Tp>& __va) noexcept
^
/opt/tdx-xwayland/5.7.2/sysroots/aarch64-tdx-linux/usr/lib/aarch64-tdx-linux/9.5.0/../../../include/c++/9.5.0/bits/range_access.h:107:37: note: previous declaration is here
template<typename _Tp> const _Tp* end(const valarray<_Tp>&);
^
4 errors generated.
Na jakiej podstawie kompilator szuka swoich systemowych INCLUDE ?
Bo jak zaczynam szukać <valarray>
to mam dwa
/opt/tdx-xwayland/5.7.2/sysroots/aarch64-tdx-linux/usr/include/c++/v1/valarray
oraz
/opt/tdx-xwayland/5.7.2/sysroots/aarch64-tdx-linux/usr/include/c++/9.5.0/valarray
v1/valarray ma w nagłowku "Part of the LLVM Project"
9.5.0/valarray "This file is part of the GNU ISO C++ Library"
Wygląda to trochę tak jakby clang używał błędnego folderu include/
AHA ! bez parametru -std=gnu++17
kompilator działa