目录
1、问题描述
使用SDK中交叉编译工具链clang/clang++时,找不到头文件并且找不到/usr/include、/usr/local/include文件夹
在/usr/include路径下创建fun_test.h,并且在cmake中已经指定/usr/include
执行cmake编译时出现问题如下:
2、原因分析
后来通过命令clang++ -E -x c++ - -v < /dev/null
查看头文件路径
root@821cbad129f8:/home/faw/SDK/aos/bin# /home/faw/SDK/aos/bin/clang++ -E -x c++ - -v < /dev/null
iAOS-V200R007C10B010 clang version 10.0.1 (5884dab7e3da)
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/faw/SDK/aos/bin
(in-process)
"/home/faw/SDK/aos/bin/clang-10" -cc1 -triple aarch64-unknown-linux-gnu -E -disable-free -disable-llvm-verifier -discard-value-names -main-file-name - -mrelocation-model static -mthread-model posix -mllvm -pass-remarks= -mllvm -pass-remarks-missed= -mllvm -pass-remarks-analysis= -mframe-pointer=non-leaf -fmath-errno -fno-rounding-math -masm-verbose -mconstructor-aliases -target-cpu generic -target-feature +neon -target-abi aapcs -fallow-half-arguments-and-returns -dwarf-column-info -fno-split-dwarf-inlining -debugger-tuning=gdb -v -resource-dir /home/faw/SDK/aos/lib64/clang/10.0.1 -isysroot /home/faw/SDK/aos/bin/../sysroot -internal-isystem /home/faw/SDK/aos/bin/../sysroot/usr/include/c++/v1 -internal-isystem /home/faw/SDK/aos/bin/../sysroot/usr/local/include -internal-isystem /home/faw/SDK/aos/lib64/clang/10.0.1/include -internal-externc-isystem /home/faw/SDK/aos/bin/../sysroot/include -internal-externc-isystem /home/faw/SDK/aos/bin/../sysroot/usr/include -fdeprecated-macro -fdebug-compilation-dir /home/faw/SDK/aos/bin -ferror-limit 19 -fmessage-length 0 -fno-signed-char -fgnuc-version=4.2.1 -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -mllvm -delete-infinite-loops=true -mllvm -enable-loop-split=true -faddrsig -o - -x c++ -
clang -cc1 version 10.0.1 based upon LLVM 10.0.1 default target aarch64-unknown-linux-gnu
ignoring nonexistent directory "/home/faw/SDK/aos/bin/../sysroot/usr/local/include"
ignoring nonexistent directory "/home/faw/SDK/aos/bin/../sysroot/include"
#include "..." search starts here:
#include <...> search starts here:
/home/faw/SDK/aos/bin/../sysroot/usr/include/c++/v1
/home/faw/SDK/aos/lib64/clang/10.0.1/include
/home/faw/SDK/aos/bin/../sysroot/usr/include
End of search list.
# 1 "<stdin>"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 403 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "<stdin>" 2
发现少了/usr/include
路径以及/usr/local/include路径,顾得出结论,此交叉编译工具链在底层封装时为了屏蔽系统库的干扰,对/usr/include
路径以及/usr/local/include路径进行了屏蔽处理,所以在上述代码编译中获取不到头文件的现象
3、解决办法
a) 安装所需的库以及头文件可以安装至/home/faw/SDK/aos/bin/../sysroot/usr/路径下,这样就可以解决找不到头文件的问题【已实验,可解决问题】
b) 可以将屏蔽的/usr/include
路径以及/usr/local/include路径添加回来【未做尝试】