我制作了一个静态库。 这也没有错误,库文件也是如此。 所以,我尝试使用该库。
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
所以,我问你。 怎么能解决这个问题呢?
答案 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
,因为库文件位于当前的工作目录中,无论如何都应该在那里找到。