ec2にsqliteの新バージョンをインストールした後、pathを通す際に出てきた共有ライブラリというワードにて調べてみました。
そもそもライブラリとは
・よく使う機能をまとめたもの
・プログラム(lsコマンド等の実行ファイル)から利用できるようにしたもの
※実行ファイル
┗/usr/bin/ls等
ライブラリの種類
・静的ライブラリ
┗実行ファイル内に埋め込まれているライブラリ
┗実行ファイルごとにライブラリが重複してしまうデメリットがある
┗拡張子「lib○○.a」
・共有ライブラリ
┗実行ファイル内に埋め込まないライブラリ
┗左記などに配置されている: /usr/lib64
┗拡張子「lib○○.so.○○」
実行ファイルが必要とする共有ライブラリを確認する方法
・lddコマンドを使用する
root:~/environment (master) $ ldd /usr/bin/ls
linux-vdso.so.1 (0x00007ffe847f0000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f400b368000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007f400b15f000)
libacl.so.1 => /lib64/libacl.so.1 (0x00007f400af56000)
libc.so.6 => /lib64/libc.so.6 (0x00007f400abab000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f400a947000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f400a743000)
/lib64/ld-linux-x86-64.so.2 (0x00007f400b58f000)
libattr.so.1 => /lib64/libattr.so.1 (0x00007f400a53e000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f400a320000)
※実行ファイルの場所を確認するコマンド
┗which ls
■その他の共有ライブラリの検索の仕方
・下記に共有ライブラリのpathが載っている
┗/etc/ld.so.conf
┗中身→include ld.so.conf.d/*.conf
root:~/environment (master) $ ls -l /etc/ld.so.conf.d
total 24
-rw-r--r-- 1 root root 26 May 25 2021 bind-export-x86_64.conf
-rw-r--r-- 1 root root 19 Feb 13 2020 dyninst-x86_64.conf
-r--r--r-- 1 root root 324 Mar 2 18:41 kernel-4.14.268-205.500.amzn2.x86_64.conf
-r--r--r-- 1 root root 324 Mar 30 01:15 kernel-4.14.273-207.502.amzn2.x86_64.conf
-r--r--r-- 1 root root 324 Apr 27 21:11 kernel-4.14.276-211.499.amzn2.x86_64.conf
-rw-r--r-- 1 root root 17 Dec 17 17:17 mysql-x86_64.conf
root:~/environment (master) $
root:~/environment (master) $ cat /etc/ld.so.conf.d/mysql-x86_64.conf
/usr/lib64/mysql
毎回共有ライブラリを参照するのは非効率
・上記の理由により、実際には下記キャッシュを参照する
┗ /etc/ld.so.cache
・共有ライブラリを追加した場合、/etc/ld.so.confの編集が必要
・また「ld.so.conf」に基づき、「ld.so.cache」 を変更する必要がある
┗ldconifgを実行
その他の共有ライブラリの追加方法
・環境変数である、LD_LIBRARY_PATHを使用
$export LD_LIBRARY_PATH="/hogehoge/lib"
・ログイン時に実行されるようにbash_profile内に組み込む
$export LD_LIBRARY_PATH="/hogehoge/lib">> ~/.bash_profile
・最後に読み込み忘れずに
$source ~/.bash_profile