Linux-Kernel

使用古老核心在 linux 上編譯新的 boost 庫

  • September 29, 2016

我嘗試在核心版本為 2.6.18-92.1.13.el5(來自uname -r)的 Linux 系統上編譯最新的 boost 庫(1.62.0),以及使用 gcc 6.1.0 的 2016 intel c++ 編譯器。

新的 intel c++ 編譯器和 gcc 安裝在我的主目錄的子目錄中。我使用的舊 glibc 可能與核心一樣古老(ldd --version給出ldd (GNU libc) 2.5)。

我收到執行緒模組的以下錯誤:

In file included from libs/log/src/event.cpp(31):
/usr/include/linux/futex.h(96): error: identifier "u32" is undefined
 long do_futex(u32 *uaddr, int op, u32 val, unsigned long timeout,
               ^

這是整個編譯中唯一的錯誤。

我無法在電腦上安裝新核心,因為我沒有 root 訪問權限。

安裝最新的 Linux 標頭檔是個好主意嗎?這是否允許我安裝 boost 1.62.0 而不會出現錯誤?

我在第一個參考文獻中發現了以下內容:

CentOS 5.2 附帶 Boost 1.33.1

如果您堅持使用這種駭人聽聞的方法,您需要訪問Boost Archived Versions並查找 1.33.1 版本。但請注意發布日期:

版本 1.33.1

格林威治標準時間 2006 年 12 月 5 日 12:00

下載應該通過 yum 安裝的版本後,在您的主目錄中建構它。 不要升級您的 GCC 版本。由於系統的使用年限,您嘗試安裝的工具受到過時工具鏈使用年限的限制。

在任何具有包管理器的系統中,包管理器都不應被禁用。您應該考慮升級作業系統。請參閱此處接受的答案。在升級核心之前,您不應該升級標頭檔,並且在yum恢復之前不能升級核心。

參考

CentOS 5.2 上 Boost (libboost) RPM 的 RPM 規範

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