• ベストアンサー

特定のライブラリを参照しているか調べる方法

ソースからビルドしたあるコマンドが共有ライブラリ(/usr/local/lib)にある特定のsoファイルやlaファイルを参照できていないのではという疑念があります。ビルドしたコマンドが参照しているか調べる方法(コマンド)があるらしいのですがどういうコマンドを打てばよいでしょうか。下記であってますでしょうか。その場合、どのような見方をすればよいでしょうか。 readelf -a `which コマンド名`

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ldd 'which コマンド名'

その他の回答 (1)

  • _kappe_
  • ベストアンサー率68% (1522/2216)
回答No.2

UNIX系のOSであろうことは推測できますが、こういう場合はOS名を質問に明記してください。 Linuxならばlddコマンドを使えます。 https://linuxjm.osdn.jp/html/ld.so/man1/ldd.1.html

unko347
質問者

お礼

ありがとうございます。CentOSです

Powered by GRATICA

関連するQ&A

  • GNU gettext が変なライブラリを参照している

    Solaris 2.7 に GNU gettext 0.14.5 をインストールしようとしています.gmake は通るのですが,出来上がった xgettext や msgfmt などのバイナリを ldd すると, .libs/libgettextsrc-0.14.5.so => .libs/libgettextsrc-0.14.5.so .libs/libgettextlib-0.14.5.so => (file not found) .libs/libintl.so.3.4.3 => (file not found) libiconv.so.2 => /usr/local/lib/libiconv.so.2 libc.so.1 => /usr/lib/libc.so.1 libexpat.so.0 => /usr/local/lib/libexpat.so.0 .libs/libgettextlib-0.14.5.so => (file not found) .libs/libintl.so.3.4.3 => (file not found) libdl.so.1 => /usr/lib/libdl.so.1 /usr/platform/SUNW,Ultra-4/lib/libc_psr.so.1 となり,どうやら一時ディレクトリである .libs 以下のライブラリを参照してしまっているようです.当然,gettext を用いて make した他のプログラムも動かなくなってしまうため,とても困っています. 試しに gettext 0.10.40 という古いものを入れてみたところ,問題は起こりませんでした. libintl.so.1 => /usr/local/lib/libintl.so.1 libiconv.so.2 => /usr/local/lib/libiconv.so.2 libc.so.1 => /usr/lib/libc.so.1 libdl.so.1 => /usr/lib/libdl.so.1 /usr/platform/SUNW,Ultra-4/lib/libc_psr.so.1 回避策等あれば教えていただきたいです. なお,gcc は 2.7.2.3 です.よろしくお願いいたします.

  • 共有ライブラリが見つからない

     お世話になります。  xxxxxというソフトウェアを動作させようとしたところ、下記のようなエラーメッセージが出ました。 > ld.so.1: xxxxx: fatal: libsasl.so: version `SUNWprivate1.1' not found (required by file /usr/lib/mps/libldap60.so) > ld.so.1: xxxxx: fatal: libsasl.so: open failed: No such file or directory > rc = 9 ■質問1  これは、 ・ld.so.1という共有モジュールが ・内部的にrequired by file /usr/lib/mps/libldap60.so というモジュールを呼んでいて ・それがlibsasl.soを呼ぼうとしたときに ・`SUNWprivate1.1'というバージョンのものがない というエラーだと解釈してよろしいでしょうか。 ■質問2  findでlibsasl.soを検索したところ、下記の場所にありました。 > /usr/lib/sparcv9/libsasl.so > /usr/lib/libsasl.so crleコマンドで共有ライブラリの検索パスを見てみたところ、/usr/libは含まれていました。 > @root# crle -v > > 構成ファイル [バージョン 4]: /var/ld/ld.config > デフォルトライブラリパス (ELF): /usr/lib:/usr/local/ssl/lib/:/usr/lib/mps > トラステッドディレクトリ (ELF): /usr/lib/secure:/opt/SUNWmsgsr/lib:/usr/lib/mps > > コマンド行: > crle -c /var/ld/ld.config \ > -l /usr/lib:/usr/local/ssl/lib/:/usr/lib/mps \ > -s /usr/lib/secure:/opt/SUNWmsgsr/lib:/usr/lib/mps  それでもエラーが出るのは ・このディレクトリにあるlibsasl.soが`SUNWprivate1.1'というバージョンではないから という解釈でよろしいでしょうか。 ■質問3 `SUNWprivate1.1'というバージョンのlibsasl.soを検索する方法があるでしょうか。  いろいろですみません。よろしくお願いいたします。

  • gccでの共有ライブラリのver指定

    表題の件に関して質問させていただきます。 たとえば/usr/libにある;libA.soをリンクしたい時、gccでは gcc -lA としますが、libA.so.1,libA.so.2‥と複数バージョンがある場合、バージョンまで指定してコンパイルすることは可能でしょうか? サーバー権限を持っていないので、シンボリックリンクを張り直すという手は使えません。 また、自分のアカウントで同共有ライブラリを用意したのですが、/usr/libが優先されてしまい、自分のアカウントのライブラリを設定することは出来ません。 解決法をご存知の方、ご教授お願い致します。

  • ユーザコマンド(1)やライブラリ(3)のソースコードはどこ?

    どのUNIX系OSにも見られるgrep(1)等のユーザコマンドや /lib, /usr/lib等にあるライブラリのソースコードは どこで手に入るのでしょうか? システムコール(2)のソースコードは全部/usr/src(linuxの場合)の 中に入っていると考えて良いのでしょうか。

  • PHPのビルドについて質問です。

    ご教授願います。 LINUX上でPHPをソースからビルドした場合、例えば./configureオプションに --with-readline というオプションをつけたとします。その場合別途インストールした libreadlline.soというモジュールが共有ライブラリとして動的に作用しますよね? lddコマンドで共有ライブラリをしらべると linux-vdso.so.1 => (0x00007fff86bff000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f70ed4ab000) libz.so.1 => /lib64/libz.so.1 (0x00007f70ed294000) libexslt.so.0 => /usr/lib64/libexslt.so.0 (0x00007f70ed080000) libtidy-0.99.so.0 => /usr/lib64/libtidy-0.99.so.0 (0x00007f70ece21000) libreadline.so.6 => /lib64/libreadline.so.6 (0x00007f70ecbdd000) libncurses.so.5 => /lib64/libncurses.so.5 (0x00007f70ec9bb000) librt.so.1 => /lib64/librt.so.1 (0x00007f70ec7b3000) libmcrypt.so.4 => /usr/local/lib/libmcrypt.so.4 (0x00007f70ec580000) libgmp.so.3 => /usr/lib64/libgmp.so.3 (0x00007f70ec325000) libpng12.so.0 => /usr/lib64/libpng12.so.0 (0x00007f70ec0ff000) とこのような共有状態が確認できます。だだこれだと、libreadline.so.6 => /lib64/libreadline.so.6という共有モジュールを 意図して削除した場合、動的リンクができずに php -a によるインタラクティブモードが動かせなくなります。 これを回避するために、静的リンク?というのでしょうかphpバイナリそのものに組み込むことはできないのでしょうか? つまり外部のlibreadline.soに依存せずにphpを動かすと行った具合です。 もちろん、これがなんのいみのない処理なのはわかります。起動するたびにメモリを大量に消費してしまうのでしょう。 ただ、こういうlibreadline.soなどの共有モジュールをphpバイナリに組み込める方法があるかどうかをしって実際に試してみたいのです。 LINUXなどPHPなどに造詣が深い方よろしっくご教授ください。お願い致します。

    • 締切済み
    • PHP
  • ld.so.confとLD_LIBRARY_PATH

    環境は、debianEtchなのですが (1)LD_LIBRARY_PATH=/usr/local/lib (2)echo "/usr/local/lib" >> /etc/ld.so.conf  ldconfig と2通りの設定で実験をしたのですが、 (1)の設定ではプログラムがエラーを吐かずに動く。 (2)の設定では、プログラムがエラーを吐いて動かない。 (1)と(2)の設定では、何が違うのでしょうか。 私の考えではライブラリの検索場所を探してるという同じ位置づけなのです。 どなたかご存知の方がいられましたらご教授のほうお願いします。

  • VS2013リンクするライブラリ一覧表示方法は?

    こんばんは。 Visual Studio 2013の初心者です。基本的なことで困っております。 どうかアドバイスをお願い申し上げます。 ・質問内容 プロジェクトに登録されているリンクするライブラリ名(*.lib)を確認する(一覧表示する)方法を教えて下さい。 ・背景 とある仕事を引きつぐことになりまして、貰ったVS2013のプロジェクト(ソース)をビルドしようとしましたが「****.lib」がありません。と出て来てリンクエラーになってしまいます。 足りないライブラリを追加してまたビルドすると別の「****.lib」がありません。と出てしまいます。この繰り返しです。 しかし、その都度「***.libファイルが足りない」と言って貰うのは、ウザがられるので一括して見る方法が判りません。 プロジェクトファイルでリンクに必要な「ライブラリの一覧」を見たいのです。そして、「これだけのlibが無いので欲しい」と一括して貰いたいのです。 しかし、lib名を検索掛けても何処にリンクに必要なライブラリ一覧が記録されているファイルが見つかりませんでした。 一体何処に記録されているのでしょうか? 色々web検索したのですがどうしても見つかりません。 大変、難儀しております。 宜しくお願い申し上げます。

  • gccの「-l」オプションとライブラリの関係

    gcc の -l オプションってどのような動作なのでしょうか?? sendmail関係の少々実験的な開発をするために、 OSに標準で入っているsendmail関係のライブラリである、   /usr/lib/libmilter.a   /usr/lib/libmilter.so   /usr/lib/libmilter.so.3 を削除して、 sendmailをソースからコンパイルして、 sendmailのソースの中のlibmilterもコンパイルしました。 この時点で、libmilter.a は、コンパイルしたディレクトリ(/usr/local/src/sendmail-8.14.2/)の下の   /usr/local/src/sendmail-8.14.2/obj.FreeBSD.6.2-RELEASE.i386/libmilter/ の中にしか存在しないのですが・・・ gcc -pthread -lc_r \   -L/usr/local/src/sendmail-8.14.2/obj.FreeBSD.6.2-RELEASE.i386/libmilter/ \   -lmilter \   test.c としてコンパイルしようとすると、libmilter の中にある関数が、 ことごとく「undefined reference」になってしまいます。 これを、-L や -lオプションでライブラリを探させるのをやめて、明示的に gcc -pthread -lc_r \   test.c \   /usr/local/src/sendmail-8.14.2/obj.FreeBSD.6.2-RELEASE.i386/libmilter/libmilter.a と書くと、問題なくコンパイル&リンクできるのですが・・・ なぜなのでしょうか??

  • OpenSSLの共有ライブラリ(libcrypto.so)動的リンクにつきまして

    [環境] Linux version 2.6.9-67.EL gcc version 3.4.6 (Red Hat 3.4.6-8)) 以下のように、OpenSSLの共有ライブラリlibcrypto.soをロードする プログラムを書いているのですが、 ------ #include <stdio.h> #include <dlfcn.h> #include <errno.h> void main(void) { void* hSO; hSO = DLL_OPEN("/usr/local/ssl/lib/libcrypto.so", RTLD_NOW); if( hSO == NULL ) { printf("%s\n", dlerror()); } else { // 処理 } } ------ hSO = DLL_OPEN("/usr/local/ssl/lib/libcrypto.so", RTLD_NOW); で、NULLが返って来てしまいます。 [dlerror内容] /usr/local/ssl/lib/libcrypto.so: cannot open shared object file: No such file or directory しかし、このパスには、シンボリックリンクされたlibcrypto.soファイルが存在します。 試しに、同ディレクトリにあるlibcrypto.so.0.9.8mも試しましたが、同じエラーが出力されました。 パスの指定方法に、何か行う必要があるのでしょうか。

  • opensshのインストールができない

    solaris9上でOPENSSH-4.2p1をインストールしていますが、うまくいきません。下記のようなエラーが出ます。 未定義の 最初に参照している シンボル ファイル dlsym /usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o) (シンボルは暗黙 の依存性 /usr/lib/libdl.so.1 に属しています) dlopen /usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o) (シンボルは暗黙 の依存性 /usr/lib/libdl.so.1 に属しています) dlclose /usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o) (シンボルは暗黙 の依存性 /usr/lib/libdl.so.1 に属しています) dlerror /usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o) (シンボルは暗黙 の依存性 /usr/lib/libdl.so.1 に属しています) ld: 重大なエラー: シンボル参照エラー。ssh に書き込まれる出力はありません。 collect2: ld returned 1 exit status make: *** [ssh] Error 1 opensslは0.9.8、zlibは1.2.3をソースから入れました。 アドバイスお願いします。

専門家に質問してみよう