使用Clang交叉编译无法找到C++头文件,但GCC可正常编译
交叉编译C应用:Clang无法识别标准C头文件的问题
我正在为两款不同的单板计算机编译应用程序:
- 其中一款使用GCC交叉编译器可成功构建
- 另一款没有预构建的GCC交叉编译器,因此选择使用Clang,但遇到了问题:Clang找不到
<algorithm>这类标准C++头文件
两次编译使用的源代码、所有CMakeLists.txt文件完全一致,仅工具链文件和对应的sysroot路径不同。我已经确认algorithm文件位于C:/Bananapi_rootfs/usr/include/c++/8/目录下,但Clang并未将该目录纳入头文件搜索列表。
请问我需要在工具链文件中手动添加该目录,还是有特定的Clang开关可以让它自动找到这个目录?
Clang编译命令及输出
[build] "C:/msys64/clang64/bin/clang++.exe" -cc1 -triple aarch64-unknown-linux-gnu -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name format.cc -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=non-leaf -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu generic -target-feature +neon -target-feature +v8a -target-abi aapcs -tune-cpu cortex-a55 -debugger-tuning=gdb -v -fcoverage-compilation-dir=C:/Users/AZARUB~1/DOCUME~1/my_app/build/fmt -resource-dir C:/msys64/clang64/lib/clang/17 -dependency-file "CMakeFiles\fmt.dir\src\format.cc.o.d" -MT fmt/CMakeFiles/fmt.dir/src/format.cc.o -sys-header-deps -I "C:\Users\AZARUB~1\DOCUME~1\my_app\fmt\include" -D NDEBUG -isysroot C:/Bananapi_rootfs -internal-isystem C:/msys64/clang64/lib/clang/17/include -internal-isystem C:/Bananapi_rootfs/usr/local/include -internal-isystem C:/Bananapi_rootfs/lib/gcc/aarch64-linux-gnu/8/../../../../aarch64-linux-gnu/include -internal-externc-isystem C:/Bananapi_rootfs/usr/include/aarch64-linux-gnu -internal-externc-isystem C:/Bananapi_rootfs/include -internal-externc-isystem C:/Bananapi_rootfs/usr/include -O3 -Wall -Wextra -Wpedantic -std=gnu++17 -fdeprecated-macro -fdebug-compilation-dir=C:/Users/AZARUB~1/DOCUME~1/my_app/build/fmt -ferror-limit 19 -fno-signed-char -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -vectorize-loops -vectorize-slp -target-feature -fmv -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o "CMakeFiles\fmt.dir\src\format.cc.o" -x c++ "C:\Users\azarubkin\Documents\my_app\fmt\src\format.cc" [build] clang -cc1 version 17.0.6 based upon LLVM 17.0.6 default target x86_64-w64-windows-gnu [build] ignoring nonexistent directory "C:/Bananapi_rootfs/lib/gcc/aarch64-linux-gnu/8/../../../../aarch64-linux-gnu/include" [build] ignoring nonexistent directory "C:/Bananapi_rootfs/include" [build] #include "..." search starts here: [build] #include <...> search starts here: [build] C:\Users\AZARUB~1\DOCUME~1\my_app\fmt\include [build] C:/msys64/clang64/lib/clang/17/include [build] C:/Bananapi_rootfs/usr/local/include [build] C:/Bananapi_rootfs/usr/include/aarch64-linux-gnu [build] C:/Bananapi_rootfs/usr/include [build] End of search list.
GCC编译命令及输出
GCC命令
"C:\\SysGCC\\beaglebone\\bin\\arm-linux-gnueabihf-g++.exe --sysroot=C:/beaglebone_rootfs -IC:\\Users\\AZARUB~1\\DOCUME~1\\my_app\\fmt\\include -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=hard -Wp,-v -O3 -DNDEBUG -std=gnu++17 -Wall -Wextra -Wpedantic -o CMakeFiles\\fmt.dir\\src\\os.cc.o -c \"C:\\Users\\azarubkin\\Documents\\my_app\\fmt\\src\\os.cc\""
GCC输出
[build] [ 10%] Building CXX object fmt/CMakeFiles/fmt.dir/src/os.cc.o [build] ignoring nonexistent directory "c:\sysgcc\beaglebone\include\arm-linux-gnueabihf\c++\8" [build] ignoring nonexistent directory "c:\sysgcc\beaglebone\arm-linux-gnueabihf\include\arm-linux-gnueabihf\c++\8\arm-linux-gnueabihf" [build] ignoring duplicate directory "c:\sysgcc\beaglebone\arm-linux-gnueabihf\include\c++\8" [build] ignoring nonexistent directory "c:\sysgcc\beaglebone\include\arm-linux-gnueabihf\c++\8" [build] ignoring nonexistent directory "c:\sysgcc\beaglebone\arm-linux-gnueabihf\include\arm-linux-gnueabihf\c++\8" [build] ignoring duplicate directory "c:\sysgcc\beaglebone\arm-linux-gnueabihf\include\c++\8\backward" [build] ignoring duplicate directory "c:\sysgcc\beaglebone\lib\gcc\arm-linux-gnueabihf\8\include" [build] ignoring nonexistent directory "c:\beaglebone_rootfs\mnt\f\gnu\beaglebone\out\include\arm-linux-gnueabihf" [build] ignoring nonexistent directory "c:\beaglebone_rootfs\mnt\f\gnu\beaglebone\out\include" [build] ignoring duplicate directory "c:\sysgcc\beaglebone\lib\gcc\arm-linux-gnueabihf\8\include-fixed" [build] ignoring duplicate directory "c:\sysgcc\beaglebone\arm-linux-gnueabihf\include" [build] #include "..." search starts here: [build] #include <...> search starts here: [build] C:\Users\AZARUB~1\DOCUME~1\my_app\fmt\include [build] c:\sysgcc\beaglebone\arm-linux-gnueabihf\include\c++\8 [build] c:\sysgcc\beaglebone\arm-linux-gnueabihf\include\c++\8\backward [build] c:\sysgcc\beaglebone\lib\gcc\arm-linux-gnueabihf\8\include [build] c:\sysgcc\beaglebone\lib\gcc\arm-linux-gnueabihf\8\include-fixed [build] c:\sysgcc\beaglebone\arm-linux-gnueabihf\include [build] c:\beaglebone_rootfs\usr\include\arm-linux-gnueabihf [build] c:\beaglebone_rootfs\usr\include [build] End of search list.
内容的提问来源于stack exchange,提问作者Alexandr Zarubkin
相关产品推荐
相关产品推荐

