在C程序中包含一个库(lsusb)

在C程序中包含一个库(lsusb),c,fedora,C,Fedora,我对C语言编程还是相当陌生的,我正在开发一个程序,在这个程序中,我想控制一个集线器上各个端口的电源。然而,这不是我现在面临的问题 我在网上找到了一个可以做我想做的事情的程序,我正在尝试编译它。但是它使用了#include。lsusb位于与我要运行的文件完全不同的文件夹中(而不是在子文件夹中),当我尝试编译它时,逻辑上,我得到的错误是找不到文件lsusb.h 如何链接到此文件以便找到它?请参阅gcc手册页中的“-I”参数。它允许您指定在其中查找头文件的目录。另请参见-l和-l.参见gcc手册页中的

我对C语言编程还是相当陌生的,我正在开发一个程序,在这个程序中,我想控制一个集线器上各个端口的电源。然而,这不是我现在面临的问题

我在网上找到了一个可以做我想做的事情的程序,我正在尝试编译它。但是它使用了
#include
。lsusb位于与我要运行的文件完全不同的文件夹中(而不是在子文件夹中),当我尝试编译它时,逻辑上,我得到的错误是找不到文件lsusb.h


如何链接到此文件以便找到它?

请参阅gcc手册页中的“-I”参数。它允许您指定在其中查找头文件的目录。另请参见-l和-l.

参见gcc手册页中的“-I”参数。它允许您指定在其中查找头文件的目录。另请参见-l和-l.

或try#包括“./../path_to_the_file/lsusb.h”

或try#包括“./../path_to_the_file/lsusb.h”

这更像是一个GCC工具链问题,而不是一个C问题(尽管大多数C编译器使用相同的Unixy标志)

包含文件周围的大括号(
)表示您希望编译器在其标准搜索路径中搜索包含文件。因此,您可以通过自己将新包含文件放入标准包含文件搜索路径上的目录,或将其目录添加到文件搜索路径中,来访问该新包含文件。对于GCC,您可以通过给GCC一个标志
-I“directoryname”
来实现后者,其中“directoryname”是保存您的新include文件的完整文件路径


一旦编译器找到它,链接器可能与库文件本身(“liblsusb.a”?)有完全相同的问题。你也可以用同样的方法来解决。GCC的链接器需要的标志是
-L
而不是
-I
这更多的是一个GCC工具链问题,而不是一个C问题(尽管大多数C编译器使用相同的Unixy标志)

包含文件周围的大括号(
)表示您希望编译器在其标准搜索路径中搜索包含文件。因此,您可以通过自己将新包含文件放入标准包含文件搜索路径上的目录,或将其目录添加到文件搜索路径中,来访问该新包含文件。对于GCC,您可以通过给GCC一个标志
-I“directoryname”
来实现后者,其中“directoryname”是保存您的新include文件的完整文件路径


一旦编译器找到它,链接器可能与库文件本身(“liblsusb.a”?)有完全相同的问题。你也可以用同样的方法来解决。GCC的链接器需要的标志是
-L
,而不是
-I

,这确实是不推荐的,因为平台之间的路径可能不一致。最好指定编译器的搜索路径,而不是在source.Yeah中指定硬代码路径。有时您会在include file语句中看到相对路径,但几乎不会看到绝对文件路径。如果您这样做,您的代码将不会在除您的系统之外的大多数系统上编译。验证您是否可以手动找到该文件可能还可以,但应立即替换。由于平台之间的路径可能不一致,因此不建议这样做。最好指定编译器的搜索路径,而不是在source.Yeah中指定硬代码路径。有时您会在include file语句中看到相对路径,但几乎不会看到绝对文件路径。如果您这样做,您的代码将不会在除您的系统之外的大多数系统上编译。也许可以简单地验证您是否可以手动找到该文件,但应立即替换。