编译器找不到已安装的库头文件。

3

我在用C语言写我的第一个应用程序,但是它似乎找不到头文件(我按照自述文件中的说明进行了安装):

#include <stdio.h>
#include <stdlib.h>
#include <ftdi.h>

int main (int argc, char *argv[])
{
int ret;
struct ftdi_context = *ftdi;
struct ftdi_version_info version;
if ((ftdi = ftdi_new()) == 0)
{
    fprintf(stderr, "ftdi_new failed\n");
}
else {
    fprintf(stderr, "Success\n");
}
return 0;
}

但它在这里找到了它:
ollieb@ursus ~/Documents/BitBang $ locate ftdi.h
/home/ollieb/.local/share/Trash/files/libftdi/libftdi/ftdipp/ftdi.hpp
/home/ollieb/.local/share/Trash/files/libftdi/libftdi/src/ftdi.h
/home/ollieb/Applications/libftdi1-1.3/build/doc/html/group__libftdi.html
/home/ollieb/Applications/libftdi1-1.3/build/doc/man/man3/ftdi.h.3
/home/ollieb/Applications/libftdi1-1.3/build/doc/man/man3/ftdi.hpp.3
/home/ollieb/Applications/libftdi1-1.3/ftdipp/ftdi.hpp
/home/ollieb/Applications/libftdi1-1.3/src/ftdi.h
/usr/include/libftdi1/ftdi.h
/usr/include/libftdi1/ftdi.hpp

当我尝试编译时,出现了文件找不到的错误(当我在代码库文件夹中运行示例时,它们可以正常运行):

ollieb@ursus ~/Documents/BitBang $ make
make bitbang
make[1]: Entering directory '/home/ollieb/Documents/BitBang'
cc -Wall -g     bitbang.c   -o bitbang
bitbang.c:3:18: fatal error: ftdi.h: No such file or directory
compilation terminated.
<builtin>: recipe for target 'bitbang' failed
make[1]: *** [bitbang] Error 1
make[1]: Leaving directory '/home/ollieb/Documents/BitBang'
Makefile:4: recipe for target 'all' failed
make: *** [all] Error 2

确切的错误信息是什么? - rubikonx9
1
你的 ftdi.h 副本(有很多个)位于非标准位置,编译器只在某些地方搜索头文件。你需要在编译器命令中添加路径,最可能的是 -I/usr/include/libftdi1 可以解决问题。 - Iharob Al Asimi
1个回答

6
默认情况下,编译器在默认的INCLUDE路径中搜索头文件,而不是整个文件系统。
如果您的头文件在自定义路径中,您需要通知编译器。例如,使用gcc和clang,您可以使用-I开关让编译器知道头文件所在的路径。
来自gcc在线手册
"-Idir 将目录dir添加到要搜索头文件的目录列表的开头。[...]"

那我该如何将它添加到我的 make 文件中呢? - ollie299792458
是的,我认为Clang编译器在OS X上非常常见。 - Iharob Al Asimi
@ollie299792458 你必须在编译语句中提供该选项。 - Sourav Ghosh
@iharob 这有什么相关性吗? - ollie299792458
如果有人正在使用clang并读到答案gcc,他们将不得不搜索类似于如何为clang指定包含路径之类的内容。相反,由于它们几乎在所有情况下都使用相同的标志,我认为如果答案明确说明这一点会很有帮助。请记住,询问此问题的人很可能不知道这些编译器之间的差异和相似之处。而且由于这个OP显然是在一个OS X系统上,而clang是主要使用的编译器,所以我认为这会很有帮助。 - Iharob Al Asimi
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接