我正在尝试使用该IP_TRANSPARENT
声明。我使用的是 debian 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.h
,centos 的顶部有
/* Copyright (C) ... 2008, 2010 Free Software Foundation, Inc.
而我的 Debian 安装中有一个
/* 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下编译没问题。
在 debian 中,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