古いカーネルでLinuxに新しいブーストライブラリをコンパイルする

古いカーネルでLinuxに新しいブーストライブラリをコンパイルする

uname -rカーネル バージョン 2.6.18-92.1.13.el5 (から) と 2016 Intel C++ コンパイラを搭載した Linux システムで、gcc 6.1.0 を使用して最新の boost ライブラリ (1.62.0) をコンパイルしようとしています。

新しい 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,
                ^

それがコンパイル全体における唯一のエラーです。

ルートアクセス権がないため、コンピューターに新しいカーネルをインストールできません。

最新の Linux ヘッダーをインストールするのは良い考えでしょうか? そうすれば、エラーなしで boost 1.62.0 をインストールできるようになりますか?

答え1

最初の参考文献で次のことが分かりました。

CentOS 5.2 には Boost 1.33.1 が付属しています

このハック的なアプローチを主張するなら、アーカイブされたバージョンをブーストする、バージョン 1.33.1 を探します。ただし、リリース日には注意してください。

バージョン 1.33.1
2006 年 12 月 5 日 12:00 GMT

yum 経由でインストールするはずのバージョンをダウンロードした後、ホーム ディレクトリにビルドします。 GCCのバージョンをアップグレードしないでくださいシステムの古さにより、インストールしようとしているツールは古いツールチェーンの古さによって制限されます。

パッケージマネージャを備えたシステムでは、パッケージマネージャは決して無効にしないでくださいOSのアップグレードを検討してください。受け入れられた回答はこちらカーネルをアップグレードするまでヘッダー ファイルをアップグレードしないでください。また、 が復元されるまでカーネルをアップグレードすることはできませんyum

参考文献

CentOS 5.2 上の Boost (libboost) RPM の RPM 仕様

関連情報