glibc 헤더에 IP_TRANSPARENT가 없습니다.

glibc 헤더에 IP_TRANSPARENT가 없습니다.

저는 그 IP_TRANSPARENT말을 활용하려고 합니다. 저는 데비안 6.0.5를 사용하고 있습니다. IP_TRANSPARENT는 에서만 정의되지만 linux/in.h에서는 정의되지 않습니다 netinet/in.h. 예를 들어 centos에서는 IP_TRANSPARENT및 에서 linux/in.h정의 됩니다 bits/in.h.

bits/in.h내가 포함할 때 얻은 상단을 보면 netinet/in.hcentos의 상단에는

/* Copyright (C) ... 2008, 2010 Free Software Foundation, Inc.

그리고 내 데비안 설치에는

/* Copyright (C) ... 2004, 2008 Free Software Foundation, Inc.

나는 노력했다

apt-get install linux-headers-2.6.32-5-686

그런데 이미 최신 버전이라고 하네요. Debian Linux 헤더를 최신 버전으로 업데이트하는 방법은 무엇입니까?

편집하다:

centos에서는 IP_TRANSPARENT에 정의되어 bits/in.h있으며 포함하면 을 얻습니다 netinet/in.h. CentOS에서 컴파일하는 데 문제가 없습니다.

데비안에서는 IP_TRANSPARENT에 없기 bits/in.h때문에 포함하면 컴파일할 때 오류가 netinet/in.h발생합니다 .‘IP_TRANSPARENT’ undeclared

답변1

나는 당신이 이미 올바른 버전을 가지고 있다고 확신합니다. 그러나 linux/in.h그것을 사용자 공간 프로그램에 직접 포함하려고 해서는 안 됩니다.

bits/in.h이는 헤더 조각이고 필요한 경우 다른 헤더에 의해 포함되므로 이를 포함해서는 안 됩니다 .

이것이 netinet/in.h포함되어야 하는 내용이며, 제목도 포함됩니다 bits/in.h. 정의되지 않은 경우 IP_TRANSPARENT시스템의 glibc 버전이 너무 오래된 것입니다.

glibc배포판에서 제공하는 최신 버전을 이미 사용하고 있어 업데이트할 수 없는 경우 프로그램을 이식 가능하게 만드는 실용적인 솔루션은 코드에 다음을 추가하는 것입니다.

#ifndef IP_TRANSPARENT
#define IP_TRANSPARENT  19
#endif

관련 정보