x86_64 Linux 内核头文件的路径

x86_64 Linux 内核头文件的路径

我想使用一些 Linux 内核头文件来编译程序。但是,如果我只是添加-I/usr/src/linux-headers-4.4.0-36/include它找不到linux/export.h.我在以下位置看到了同名文件拱门/建筑,但我找不到amd64x86_64uname -pmix86_64 x86_64 x86_64。在arch我的例子中,正确的目录是什么?

系统带有来自存储库的Linux Mint内核4.4.0.-36

UPD:我想使用

#include <linux/platform_device.h>
#include <linux/usb/g_hid.h>

你好.cpp:

#include <linux/platform_device.h>
#include <linux/usb/g_hid.h>

int main ()
{
    return 0; // nothing
}

但是编译器-I /usr/src/linux-headers-4.4.0-36/include -I /usr/src/linux-headers-4.4.0-36/arch/x86/include说有很多重新定义并且找不到<generated/timeconst.h>。我在 中找到了它/usr/src/linux-headers-4.4.0-36-generic/include。但对于目录中的相同路径,-generic我也有一些错误。

答案1

大多数具有 32 位和 64 位变体的体系结构都位于同一arch子目录中。随着时间的推移,这种情况发生了变化;x64_64合并到x862.6.24、sh64合并sh到 2.6.25、sparc64合并到sparc2.6.29。arm64从 4.7 开始仍然是一个单独的架构。于2.6.14ppc64移至并最终于2.6.27合并。2.6月初被合并。powerpcppcmips64

所以 amd64 标头位于arch/x86.

但是您通常会根据 libc 标头而不是内核标头来编译程序。 (即使它们有时具有相同的名称,它们也具有不同的内容!)检查您是否确实需要内核头文件 - 这只发生在使用不稳定接口的程序中,这些接口可以在内核版本之间更改(例如一些低级调试接口)。

相关内容