程序用到了std::byteswap,这是C++23的东西,clang17是支持的,但我在用clang编译程序的时候总是报错no member named 'byteswap' in namespace 'std',查了一下发现它默认用了我虚拟机里的gcc11,就不支持了。上网查了一下,解决方法是安装llvm的libc++(也就是llvm文件夹里libcxx前缀的那几个),并使用-stdlib=libc++。
参考官网说明Building libc++ — libc++ documentation (llvm.org),编译安装过程中总是报奇怪的错误,比如error: template argument ‘(sizeof (_Tp) * 0)’ involves template parameter(s)。一开始百思不得其解,后来才发现它编译的时候又默认用的gcc,换成clang就一路顺风了。
在这破玩意上面卡了四天,网上基本查不到有效的解决方案,于是把解决过程分享出来。