我想編譯gtk棧(最後一個gtk2版本,2.24),並且我得到了一堆看起來相關的錯誤。即,不能從string.h和time.h中找到__locale_t
,並且找不到LC_ALL_MASK
(應該在locale.h中)。__USE_XOPEN2K8的用途以及如何設置它?
我發現所有這些問題都與__USE_XOPEN2K8
未被#defined相關。什麼是__USE_XOPEN2K8
,我該如何設置它的屬性?
例如,我是否必須將一個標誌傳遞給./configure for glib,gtk,...或者我是否必須在構建gcc或glib時更改某些東西c?我寧願不把#define __USE_XOPEN2K8
灑在我的消息來源中,而不知道它的作用。注意我使用安裝在非標準前綴中的gcc-4.6.3和glibc-2.16.0,因爲我試圖讓gtk庫在僅包含舊版本的舊版CentOS(5.8)上工作。
還注意到在幾個地方例如__locale_t
中提及缺少__locale_t
。 this bugreport。我可以在某些文件中添加#include <xlocale.h>
,但似乎正確的解決方案是獲取__USE_XOPEN2K8
。
編輯:我發現this thread描述的問題。顯然,主機系統的頭文件會被「fixincluded」到新編譯器的頭文件中。鏈接的帖子建議編輯features.h。有誰知道我是否必須事後重新編譯gcc/glibc(以及如何讓它獲得新的features.h,而不是覆蓋它)?
根據您所包含的鏈接,問題在於,當您構建gcc時,它會創建系統C庫頭文件的副本,而不是自定義glibc中的頭文件。關鍵是將gcc構建指向你的glibc構建。可悲的是,我並不完全知道該怎麼做,否則我會發表一個答案。看看gcc的配置選項,'--oldincludedir'或'--with-build-sysroot' *可能會朝着正確的方向發展,但我主要是猜測。 – rra