gcc在我制作的静态库中找不到头文件

时间:2014-06-04 05:16:38

标签: c gcc makefile

我制作了一个静态库。 这也没有错误,库文件也是如此。 所以,我尝试使用该库。

gcc -o hash_gen main.c -L../  -lhashbundle

库文件存在于该目录../中,库文件名为libhashbundle.a。 所以,我认为这个命令没有问题。 但是我尝试用gcc编译,但是gcc打印出这个错误。

main.c:4:10: fatal error: 'hash.h' file not found
#include "hash.h"
          ^

我不明白。我创建了库make,这是Makefile

all : libhashbundle.a

libhashbundle.a : hash.o
        ar rscv libhashbundle.a hash.o

hash.o : src/hash.c
        gcc -c src/hash.c

clean:
        rm -rf hash.o

我多次想到这段代码,但我没有发现错误。

这是目录树

tree

Makefile
libhashbundle.a

|src
  |hash.c
  |hash.h

|test
  |main.c

所以,我问你。 怎么能解决这个问题呢?

2 个答案:

答案 0 :(得分:1)

您只指定了一个库搜索路径(-L)。

如果您需要标题搜索路径,则需要使用-I

gcc -o hash_gen main.c -I.. -L.. -lhashbundle

答案 1 :(得分:0)

问题在于您从" root"运行您的构建。目录,而不是 / src / 。因此,当编译器看到#include "hash.h"时,它将尝试在当前目录中打开该文件,该文件将是/而不是/src/(文件所在的位置)。

要解决此问题,只需使用-Isrc将您的源目录添加到包含搜索路径:

gcc -o hash_gen main.c -Isrc -lhashbundle

请注意,我省略了-L,因为库文件位于当前的工作目录中,无论如何都应该在那里找到。