일부 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
동일한 하위 디렉터리에 있습니다. 이는 시간이 지남에 따라 2.6.24 x64_64
로 병합되고 , 2.6.25로 병합되고 , 2.6.29 로 병합되었습니다 . 4.7부터 여전히 별도의 아키텍처입니다. 2.6.14로 이동 하고 2.6.27에서 최종적으로 병합되었습니다. 2.6 초반에 병합되었습니다.x86
sh64
sh
sparc64
sparc
arm64
ppc64
powerpc
ppc
mips64
따라서 amd64 헤더는 arch/x86
.
그러나 일반적으로 커널 헤더가 아닌 libc 헤더에 대해 프로그램을 컴파일합니다. (때로는 이름이 같더라도 내용이 다릅니다!) 실제로 커널 헤더 파일이 필요한지 확인하십시오. 이는 커널 버전 간에 변경될 수 있는 불안정한 인터페이스(예: 일부 저수준 디버깅 인터페이스)를 사용하는 프로그램에서만 발생합니다. .