「インストール - GLIBC」の版間の差分
114行目: | 114行目: | ||
<br> | <br> | ||
設定を反映させるため、再起動する。<br> | 設定を反映させるため、再起動する。<br> | ||
<br><br> | |||
== GLIBCを使用したソフトウェアのビルド == | |||
同じシステム上で複数のバージョンのGLIBCを使用することは可能である。<br> | |||
しかし、GLIBCは多くのモジュールから(200以上の共有ライブラリ)から構成されており、それらが全て一致する必要がある。<br> | |||
<br> | |||
その1つが、ld-linux.so.2ライブラリであり、libc.so.6ライブラリと一致しなければ、エラーが発生する。<br> | |||
ld-linux.so.2ライブラリへの絶対パスは、リンク時に実行ファイルにハードコードされており、<br> | |||
リンク後に簡単に変更することはできない。(patchelfを使用することで可能である)<br> | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:CentOS]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]] | [[カテゴリ:CentOS]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]] |
2021年4月3日 (土) 18:00時点における版
概要
GNU Cライブラリは、GNUシステムとGNU/Linuxシステム、そしてLinuxをカーネルとして使うシステムのためのコアライブラリである。
これらのライブラリは、ISO C11、POSIX.1-2008、BSD、OS固有のAPIなどを含む重要なAPIを提供しており、
APIには、open、read、write、malloc、printf、getaddrinfo、dlopen、pthread_create、crypt、login、exit等の基本的な機能が含まれている。
GNU Cライブラリは、下位互換性や移植性があり、高性能なISO Cライブラリになるように設計されている。
ISO C11、POSIX.1-2008、IEEE 754-2008を含むすべての関連規格に従うことを目指している。
依存関係のライブラリのインストール
Coreutilsのインストール
- Coreutilsの公式Webサイトにアクセスして、最新のCoreutilsをダウンロードする。
- ダウンロードしたCoreutilsを解凍して、Coreutilsディレクトリに移動する。
- tar xf coreutils-x.xx.tar.xz
- ビルド用ディレクトリを作成して移動する。
- mkdir build && cd build
- Coreutilsをビルドおよびインストールするために、以下のコマンドを実行する。
- export CFLAGS="-static -O2 -g"
- ./configure --prefix=/home/<ユーザ名>/InstallSoftware/Coreutils
- または
- ./configure --prefix=/home/<ユーザ名>/InstallSoftware/Coreutils \
- CC="/<GCCのインストールディレクトリ>/bin/gcc-<バージョン名> -arch i386 -arch x86_64" \
- CXX="/<GCCのインストールディレクトリ>/bin/g++-<バージョン名> -arch i386 -arch x86_64" \
- CPP="/<GCCのインストールディレクトリ>/bin/gcc-<バージョン名> -E" CXXCPP="/<GCCのインストールディレクトリ>/bin/g++-<バージョン名> -E"
- make -j 8
- make install
Binutilsのインストール
- Binutilsの公式Webサイトにアクセスして、最新のBinutilsをダウンロードする。
- ダウンロードしたBinutilsを解凍して、Binutilsディレクトリに移動する。
- tar xf Binutils-x.xx.tar.xz
- ビルド用ディレクトリを作成して移動する。
- mkdir build && cd build
- Binutilsをビルドおよびインストールするために、以下のコマンドを実行する。
- export CFLAGS="-static -O2 -g"
- ./configure --prefix=/home/<ユーザ名>/InstallSoftware/Binutils
- または
- ./configure --prefix=/home/<ユーザ名>/InstallSoftware/Binutils \
- CC="/<GCCのインストールディレクトリ>/bin/gcc-<バージョン名> -arch i386 -arch x86_64" \
- CXX="/<GCCのインストールディレクトリ>/bin/g++-<バージョン名> -arch i386 -arch x86_64" \
- CPP="/<GCCのインストールディレクトリ>/bin/gcc-<バージョン名> -E" CXXCPP="/<GCCのインストールディレクトリ>/bin/g++-<バージョン名> -E"
- make -j 8
- make install
glibc(GNU C Library)のインストール
現在使用しているglibcのバージョンを確認する。
ls -l /lib/libc-*
まず、glibcをコンパイルするディレクトリを作成する。
mkdir -p ~/InstallSoftware/GLIBC/build cd ~/InstallSoftware/GLIBC
glibcをダウンロードして解凍する。(glibc-x.xxディレクトリが作成される)
wget http://ftp.gnu.org/gnu/glibc/glibc-x.xx.tar.xz または git clone git://sourceware.org/git/glibc.git tar xf glibc-x.xx.tar.gz
環境変数LD_LIBRARY_PATH
を空にする。
LD_LIBRARY_PATH=""
ビルド用ディレクトリに移動して、ビルドおよびインストールを行う。
これで、インストールしたGLIBCにより、実行するアプリケーションをビルドすることができる。
cd build ../glibc-x.xx/configure --prefix=/home/<ユーザ名>/Installsoftware/GLIBC \ CC=/home/<ユーザ名>/InstallSoftware/GCC/gcc-<バージョン名>/bin/gcc-<バージョン名> \ CXX=/home/<ユーザ名>/InstallSoftware/GCC/g++-<バージョン名>/bin/gcc-<バージョン名> \ --host=x86_64-linux-gnu --enable-add-ons=libidn, --without-selinux \ --enable-stack-protector=strong --enable-multi-arch --with-binutils=/home/<ユーザ名>/InstallSoftware/Binutils make -j 8 make install
次に、Linuxカーネルのヘッダファイル群が必要になるので、ダウンロードしてインストールする。
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git cd linux make headers_install INSTALL_HDR_PATH=/home/ユーザ名/InstallSoftware/GLIBC
最後に、GCCのヘルパーライブラリが必要になるので、/lib64ディレクトリからコピーする。
これにより、/home/ユーザ名/InstallSoftware/GLIBCディレクトリにおいて、システムファイルを使用する準備が整う。
# パッケージ管理システムによりインストールしたGCCを使用する場合 cp -r /lib64/libgcc* /home/<ユーザ名>/InstallSoftware/GLIBC/lib64 # ホームディレクトリにインストールしたGCCを使用する場合 cp -r /<GCCのインストールディレクトリ>/libgcc* /home/<ユーザ名>/InstallSoftware/GLIBC/lib64
Linux x86やUbuntuにおいて、lib64ディレクトリではなく、libディレクトリを使用する必要がある。
glibcの確認
新しくインストールしたglibcを使用してソフトウェアを実行する。
インストールディレクトリにあるtestrun.shを使用して、以下のようにコマンドを実行する。
/home/<ユーザ名>/InstallSoftware/GLIBC/build/testrun.sh <実行するソフトウェアのパス>
環境パスの設定
インストールしたglibcを使用するために、環境パスを設定する。
sudo vi /etc/ld.so.conf
# /etc/ld.so.confファイル /<glibcのインストールディレクトリ>/lib64 /<glibcのインストールディレクトリ>/lib
設定を反映させるため、再起動する。
GLIBCを使用したソフトウェアのビルド
同じシステム上で複数のバージョンのGLIBCを使用することは可能である。
しかし、GLIBCは多くのモジュールから(200以上の共有ライブラリ)から構成されており、それらが全て一致する必要がある。
その1つが、ld-linux.so.2ライブラリであり、libc.so.6ライブラリと一致しなければ、エラーが発生する。
ld-linux.so.2ライブラリへの絶対パスは、リンク時に実行ファイルにハードコードされており、
リンク後に簡単に変更することはできない。(patchelfを使用することで可能である)