Linux

glibc 標頭中缺少 IP_TRANSPARENT

  • December 14, 2012

我正在嘗試使用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_TRANSPARENTis not in bits/in.h,所以當我包含時,編譯時netinet/in.h會出錯。‘IP_TRANSPARENT’ undeclared

我確定您已經擁有正確的版本,但linux/in.h它是一個核心標頭檔,您不應該嘗試將其直接包含在使用者空間程序中。

您也不應該包含bits/in.h,因為這是一個標題片段,必要時將被其他標題包含。

netinet/in.h是您應該包含的內容,而這又將包含bits/in.h標題。如果沒有定義,IP_TRANSPARENT那麼系統上的 glibc 版本太舊了。

glibc如果由於您已經使用發行版提供的最新版本而無法更新,那麼實用的解決方案以及使您的程序可移植的解決方案是將以下內容添加到您的程式碼中:

#ifndef IP_TRANSPARENT
#define IP_TRANSPARENT  19
#endif

引用自:https://unix.stackexchange.com/questions/58431