cJSON.h: 没有那个文件或目录

cJSON.h: No such file or directory

我在为 json 编译不同的库时遇到了太多问题,最后我得到了一个已经编译好的 json 库,它是 cJSON 可以与我的项目链接但是当我下载它时,并且将其与测试 c 文件链接,例如:

//file1.c    
 #include "cJSON.h"
    ...
    ...
    ...

然后我使用命令通过gcc编译它:

gcc file1.c -lcJSON

它returns:

file1.c:7:19: fatal error: cJSON.h: No such file or directory
 #include "cJSON.h"

好吧,经过几次尝试,我终于成功地找出问题并解决了它。因为 cJSON 是一个静态库,所以我不能像 -lcJSON 那样执行动态 linking,编译 file1.c 和 link cJSON lib 的完美方法是:

  1. 将 cJSON.c 和 cJSON.h 文件添加到 file1.c 的同一目录。
  2. 在 file1.c 中包含 "cJSON.h"。
  3. 执行命令gcc cJSON.c file1.c -lm.

终于编译成功。

使用默认 Makefile 配置安装时,头文件库的正确路径是 #include <cjson/cJSON.h>

还有,编译命令不对,cJSON库安装在cjson下,全部小写。因此,使用 gcc file1.c -lcjson 即可。

正如@Zainab 所说,文件名周围的双引号 " 是当头文件位于 与您正在编译的文件相同的目录中时 . less/greater 比符号 <> 指定系统上已安装的库。

列出系统上已安装的库(假设您使用的是 *NIX 系统,您可以 运行 ldconfig -p)。当用 ldconfig -p | grep 'cJSON' grep 时,我这边什么都没有 return,而用 cjson grep 会 return 结果:

        libcjson_utils.so.1 (libc6,x86-64) => /usr/lib/libcjson_utils.so.1
        libcjson_utils.so (libc6,x86-64) => /usr/lib/libcjson_utils.so
        libcjson.so.1 (libc6,x86-64) => /usr/lib/libcjson.so.1
        libcjson.so (libc6,x86-64) => /usr/lib/libcjson.so

更讽刺的是,使用 cjson/cjson.h 头文件 不起作用 ,而 cjson/cJSON.h 确实有效。