綾小路龍之介の素人思考

[gcc] リンカオプション-lで指定したライブラリがどのファイルを必要としているか

共有ライブラリを必要とするコンパイルで-larchive等としたときに、この共有ライブラリが見つからないといわれることがある。このとき、libarchive.aがライブラリパスの中においてある必要がある。

以下のようなプログラムをコンパイルする。

$ cat test.c
main () {
        return 1;
}

以下のようにコンパイルするとコンパイルに成功する。

$ gcc test.c

次に以下のようにするとエラーが出る。ldのmanpageを参照するとこれはライブラリの検索パスの下にlibarchive.aが無いことが問題だということが判る。

$ gcc -larchive test.c
/usr/bin/ld: cannot find -larchive
collect2: ld returned 1 exit status

テストのために、存在するmathライブラリを指定してコンパイルすると、コンパイルに成功することがわかる。また、libm.aがライブラリ検索パスの下にあることも確認できる。

$ gcc -lm test.c
$ locate libm.a
/usr/lib/libm.a
/usr/lib/xen/libm.a

リファレンス

  1. GNU リンカ LD の使い方: Invocation
  2. gcc リンカオプション - Google 検索
  3. Manpage of GCC
  4. gcc manpage "-l" - Google 検索

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2010-01-28T07:23:21+09:00
  2. Modified: 2010-01-28T07:23:21+09:00
  3. Generated: 2017-10-19T23:09:17+09:00