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}
)

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fulinux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值