使用Clang编译项目时出现__time64_t未定义错误求助
GCC编译正常但Clang编译出现__time64_t未定义错误的解决方法
我用GCC编译项目完全正常,但切换到任意基于Clang的编译器时,会触发以下错误:
[build] /usr/bin/clang++ -I/mnt/40ab93ed-5db8-4e22-a055-9775c3e5b937/ISC-parser/include -I/mnt/40ab93ed-5db8-4e22-a055-9775c3e5b937/ISC-parser/stdlibs -I/media/ura/Data/include -g -std=c++17 -MD -MT CMakeFiles/parser.dir/src/CLL/function/function.cpp.o -MF CMakeFiles/parser.dir/src/CLL/function/function.cpp.o.d -o CMakeFiles/parser.dir/src/CLL/function/function.cpp.o -c /mnt/40ab93ed-5db8-4e22-a055-9775c3e5b937/ISC-parser/src/CLL/function/function.cpp [build] In file included from /mnt/40ab93ed-5db8-4e22-a055-9775c3e5b937/ISC-parser/src/CLL/function/function.cpp:4: [build] In file included from /mnt/40ab93ed-5db8-4e22-a055-9775c3e5b937/ISC-parser/include/parser.h:8: [build] In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/iostream:41: [build] In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/ostream:40: [build] In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/ios:44: [build] In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/ios_base.h:39: [build] In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/ext/atomicity.h:35: [build] In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/x86_64-linux-gnu/c++/14/bits/gthr.h:157: [build] In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/x86_64-linux-gnu/c++/14/bits/gthr-default.h:35: [build] In file included from /include/pthread.h:22: [build] In file included from /include/sched.h:31: [build] /usr/include/x86_64-linux-gnu/bits/types/time_t.h:8:9: error: unknown type name '__time64_t' [build] 8 | typedef __time64_t time_t; [build] | ^ [build] In file included from /mnt/40ab93ed-5db8-4e22-a055-9775c3e5b937/ISC-parser/src/CLL/function/function.cpp:4: [build] In file included from /mnt/40ab93ed-5db8-4e22-a055-9775c3e5b937/ISC-parser/include/parser.h:8: [build] In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/iostream:41: [build] In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/ostream:40: [build] In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/ios:44: [build] In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/ios_base.h:39: [build] In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/ext/atomicity.h:35: [build] In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/x86_64-linux-gnu/c++/14/bits/gthr.h:157: [build] In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/x86_64-linux-gnu/c++/14/bits/gthr-default.h:35: [build] In file included from /include/pthread.h:22: [build] In file included from /include/sched.h:32: [build] /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h:14:3: error: unknown type name '__time64_t' [build] 14 | __time64_t tv_sec; /* Seconds. */ [build] | ^
以下是针对性的解决步骤:
修正Clang的系统头文件路径
错误日志显示编译时引用了异常路径/include/pthread.h(正常应为/usr/include/pthread.h),说明Clang未正确识别系统标准头文件路径。可在CMake中添加:include_directories(SYSTEM /usr/include)或直接在编译参数中加入
-isystem /usr/include,强制Clang使用正确的系统头文件目录。切换Clang的C++标准库
Clang默认可能 fallback 到GCC的libstdc++,存在版本兼容性问题。可强制使用LLVM的libc++,编译时添加参数:-stdlib=libc++ -lc++abi若系统未安装libc++,先执行:
sudo apt install libc++-dev libc++abi-dev调整编译宏定义顺序
-D_TIME_BITS=64和-D_FILE_OFFSET_BITS=64必须在所有头文件包含前定义才生效。在CMake中优先添加:add_compile_definitions(_TIME_BITS=64 _FILE_OFFSET_BITS=64)或在编译命令中将宏定义放在最左侧:
clang++ -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64 [其他编译参数]修复系统头文件
检查/usr/include/x86_64-linux-gnu/bits/types/time_t.h是否存在且定义正常,若文件损坏,重新安装系统头文件包:sudo apt reinstall libc6-dev
内容的提问来源于stack exchange,提问作者Sinfolke
相关产品推荐
相关产品推荐

