ld は ld.so.conf を無視します

ld は ld.so.conf を無視します

これは私の/etc/ld.so.conf

/usr/local/lib64
/usr/local/lib
include /etc/ld.so.conf.d/*.conf

ディレクトリ/etc/ld.so.conf.d/にはmysql-x86_64.conf次の 1 行のみが含まれています:/usr/lib64/mysql

/usr/lib64/mysql[ファイルにリストされている] ディレクトリには次.confのファイルが含まれています:

total 45,961,216
drwxr-xr-x   2 root root      4,096 Apr 11 17:20 ./
drwxr-xr-x 121 root root     81,920 Mar 30 20:01 ../
-rw-r--r--   1 root root 28,951,398 Dec  9 21:40 libmysqlclient.a
lrwxrwxrwx   1 root root         20 Dec  9 21:56 libmysqlclient.so -> libmysqlclient.so.21*
lrwxrwxrwx   1 root root         25 Dec  9 21:56 libmysqlclient.so.21 -> libmysqlclient.so.21.1.19*
-rwxr-xr-x   1 root root 16,869,104 Dec  9 21:40 libmysqlclient.so.21.1.19*
-rw-r--r--   1 root root     44,910 Dec  9 21:36 libmysqlservices.a

実行すると、ldconfig -p | grep mysql次の結果が返されます。

    libmysqlclient.so.21 (libc6,x86-64) => /usr/lib64/mysql/libmysqlclient.so.21
    libmysqlclient.so (libc6,x86-64) => /usr/lib64/mysql/libmysqlclient.so

非常に小さな MySQL テスト プログラムをリンクしようとすると、次のエラーが発生します。

/usr/lib64/gcc/x86_64-suse-linux/9/../../../../x86_64-suse-linux/bin/ld: cannot find -lmysqlclient

-L/usr/lib64/mysqlリンカーに追加すると機能します。

私の質問:

これによれば答えインターネットで見つかった他のドキュメントではファイルlddの内容が考慮されています/etc/ld.so.confが、私のケースではなぜ内容が無視されるのでしょうか? 何が間違っているのでしょうか?

答え1

ld.so.confld.soは、ランタイム動的リンカーの設定ファイルです。

ldはそれを意図的に無視します。独自のデフォルトがあり、 によって補完されます-L。通常、検索パスはそれを駆動するコンパイラによっても決定されますgcc -print-search-dirs。GCC についてはを参照してください。

LD_LIBRARY_PATHも影響しますld.soないld

参照静的リンカー、動的リンカー、ローダー、動的ローダーのそれぞれの実行可能 ELF ファイルは何ですか?

関連情報