xxx.c:4: fatal error: xxx.h: No such file or directory

我在交差编译的时候经常碰到类似这样的问题:

xxx.c:4: fatal error: xxx.h: No such file or directory

注:这里的xxx是一个一般的表述。

这个博客点击量挺高的,但是内容过于简单,更新下(没有验证,抛砖引玉吧),方才对得起你的时间~

方法一:修改源码

通常很多头文件会到xxx/usr/include/或者xxx/include目录下去找头文件,但是有些头文件在某个include/abc子目录下,而编译器不知道去abc目录下去找,所以此时需要指定头文件的路径,或者修改源码,类似:

#include <abc/xxx.h>
或者:
#include "abc/xxx.h"

方法二:指定路径

如果是第三方开源项目修改源码有些麻烦,此时就需要为编译器指定头文件查找路径

使用gcc/g++编译解决方法

在gcc/g++中指定头文件路径,使用-I选项,比如:

gcc test.c -o test -I xxx/include/abc -L ...

在Makefile文件中

在Makefile文件中:

INC_DIRS := -I ./inc ../common/inc  ../common/inc/mod ../common/inc/tlsdk ../encode/inc
INC_DIRS += $(TL_APP_MPP_PATH)/include

#引用时
$(CC) $(INC_DIRS) -o $@ ...

再有就是所说的文件xxx.h不存在或者目录,可是我看见xxx.h这个文件确实是在这个目录下的,我“认真”分析,弄了好久,没道理,为什么makefile文件中指定的头文件目录路径却还是找不到这个文件呢?结果我找高手一看,发现xxx.h文件在指定的头文件目录里是Xxx.h的,我恍然大悟,原来是多了一个大写字母。就是自己没有认真比对。第二次又碰到这个问题,我比较了这两个文件结果我发现所需要的文件名和头文件目录下的文件名是一样的。我就纳闷了。我还是看了好久,找不到原因,我请高手过来一看,原来是目录名中多了一个大写字母。

在Makefile.am文件中

AM_CFLAGS = \
    ... \
    -I../inc \
    -I$(topdir)/dsutils/inc \
    -I xxx/include/abc

或者:
AM_CPPFLAGS = \
    ... \
    -I../inc \
    -I$(topdir)/dsutils/inc \
    -I xxx/include/abc

在CMakefile.txt中

举个例子:

include_directories (
    ${PROJECT_SOURCE_DIR}
    ${CMAKE_BINARY_DIR}
)

或者:
target_include_directories(xxx INTERFACE
    $<INSTALL_INTERFACE:include/>
    $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/>
    $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/>
    PRIVATE ${XXX_INCLUDE_DIRS}
)

 

fulinux CSDN认证博客专家 linux uboot yocto
我是一个拥有10年经验的嵌入式软件开发工程师,热爱Linux、热爱Yocto、喜欢编程、热爱科学技术的码农!希望我的博客能帮助到哪些在茫茫黑夜中摸索的小白!
欢迎关注、点赞和订阅!
相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页
实付 29.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值