如何在 Ubuntu 中使用 apt 安装 #include <whatever.h>

How to #include <whatever.h> installed with apt in Ubuntu

我刚刚按照说明在我的 Ubuntu 20.04 中安装了 hidapi,即通过

sudo apt install libhidapi-dev

我在文件 mwe.cpp 中编写了我的程序,其中仅包含这一行:

#include <hidapi.h>

现在我想用

编译它
g++ -o mwe.o mwe.cpp

但我明白了

mwe.cpp:1:10: fatal error: hidapi.h: No such file or directory

我该如何使用这个模块?很抱歉这么基本的问题,但找不到。

如果 header 不在 header 的标准搜索路径中,那么您可以使用 -I 标志手动包含它,例如

g++ -I/usr/include/hidapi -o mwe.o mwe.cpp

要在 ubuntu 上查找文件,您可以 运行:

sudo updatedb
locate hidapi.h

> /usr/include/hidapi/hidapi.h

您可以通过以下方式查看标准包含搜索路径:

gcc -print-search-dirs

或者,因为 /usr/include 在标准搜索路径上,您可以将包含写为 <hidapi/hidapi.h>

How to #include <whatever.h> installed with apt in Ubuntu

如果软件包将 header 安装在包含在编译器默认搜索路径中的目录中(这很典型),那么您可以使用从根目录开始的相对路径来包含 header安装 header 的搜索路径。例如,如果文件在路径 /usr/include/x/y.h 中,那么您可以包含 <x/y.h>.

如果包没有在默认搜索路径中安装 header,那么您必须在调用它时指定编译器的搜索路径,然后包含 header 相对于指定的包含目录。例如,如果文件在路径 /opt/custom/x/y.h 中,则可以包含 <x/y.h> 并指定 /opt/custom 作为编译器的搜索路径。

如果您使用 GCC 或兼容的编译器,并且包支持它,那么您可以使用一个名为 pkg-config 的程序来获取使用该库所需的编译器选项。除了 header 搜索路径,这还负责与库的链接以及任何强制编译器选项。示例:

pkg-config --libs --cflags libhidapi

I don't know, how do I find the location of hidapi.h?

有几种方法可以找出文件的位置。通用工具是程序find。示例:

find / -name=hidapi.h

一个更具体的用于了解 apt 包安装的文件路径的工具是 apt-file。或者,您可以在 https://packages.ubuntu.com/ 网站中查找文件列表。

在基于 Ubuntu 的系统上,系统包 libhidapi-dev 将包含文件安装到 /usr/include/hidapi,因此请在命令行中包含此 (-I/usr/include/hidapi) 或 #include <hidapi/hidapi.h>