web-dev-qa-db-ja.com

Linux環境でlibmysqlclient.so.Xファイルの場所を見つける

Libmysqlclient.so。[15 | 16 | 18] .soファイルを知っている必要があるスクリプトをまとめています。通常は/ usr/lib /、/ usr/lib64 /または前述のディレクトリのmysql /サブディレクトリにあります。

私はいくつかのことを試しました。まず、場所は/etc/ld.so.conf.d/mysql*のmysqlファイルで見つかることがありますが、多くのサーバーではそうではありません。

別の可能性は、上記のディレクトリでそれらのファイルを検索することです。使用しているMySQLのバージョンがわかるので、適切な.soファイルを検索できますが、残念ながら、多くの人が複数の.soをインストールしているようです。たとえば、両方が存在する場合があります。

  • /usr/lib/libmysqlclient.so.15

  • /usr/lib64/libmysqlclient.so.15

この状況では、どの.soファイルが使用されているかわかりません。

とにかく、適切なlibmysqlclient.soがインストールされている場所を確認する方法はありますか?

7
wrangler

これにより、リンカーによって認識されるすべてのlibmysqlファイルが提供されます。リストの上位にあるほど優先順位が高く、リンクされる可能性が高くなります。

/sbin/ldconfig -p | grep mysql | cut -d\> -f2

ただし、ほとんどのアプリケーションはgcc -lmysqlclientを実行してリンクするため、.so.15などではなく、libmysqlclient.soとしてリストされているldconfig内のファイルを優先します。だから個人的には、最初のlibmysqlclient.soが正しいと思います。

7
Kyle

使用される共有オブジェクトライブラリは、実行されるユーザー環境とバイナリによって異なります。バイナリを実行しているユーザーにsu - USERを実行してから、コマンドldd MYSQLBINARY | grep mysqlclientを実行すると、使用するmysqlclientライブラリが決定されます。

ほとんどのLinuxシステムのデフォルトでは、/ usr/lib(x86バイナリに使用)および/ usr/lib64(x86_64ビットバイナリに使用)。

ところで、locate libmysqlclient.soを実行して、システム全体にインストールされているすべての共有オブジェクトのリストを取得します(ただし、ユーザーパスにインストールされている.soファイルは報告されません)。

3
Andrew Case

/ usr/libまたは/ usr/lib64 .....にこれらのものが使用されていない場合があることを覚えておいてください。これらは、コンパイル方法によっては、/ usr/local/lib内または下に存在する場合があります。

決定を行うのに完全に間違いのない方法があると私は確信しています。ただし、ある程度の推測は可能です。

1
mdpc

パッケージ名がわかっている場合は、パッケージのコンテンツとgrepをリストにしてみませんか?

Redhatでは、次のような...

rpm -ql mysql | grep libmysql
0
luckytaxi