我想使用一些 Linux 内核头文件来编译程序。但是,如果我只是添加-I/usr/src/linux-headers-4.4.0-36/include
它找不到linux/export.h
.我在以下位置看到了同名文件拱门/建筑,但我找不到amd64
或x86_64
。uname -pmi
说x86_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
合并到x86
2.6.24、sh64
合并sh
到 2.6.25、sparc64
合并到sparc
2.6.29。arm64
从 4.7 开始仍然是一个单独的架构。于2.6.14ppc64
移至并最终于2.6.27合并。2.6月初被合并。powerpc
ppc
mips64
所以 amd64 标头位于arch/x86
.
但是您通常会根据 libc 标头而不是内核标头来编译程序。 (即使它们有时具有相同的名称,它们也具有不同的内容!)检查您是否确实需要内核头文件 - 这只发生在使用不稳定接口的程序中,这些接口可以在内核版本之间更改(例如一些低级调试接口)。