Ubuntuで共有ライブラリをビルドしたばかりで、関数を使用しようとすると、ライブラリをロードするアプリケーションが「xxx」記号が見つからないことを報告しています。
この問題をさらに調査できるように、ライブラリによってエクスポートされた関数を確認(つまり、一覧表示)したいと思います。
関連する詳細:
OS:Ubuntu 9.10コンパイラ:gcc 4.4.1リンカー:GNU ld 2.20
Nmユーティリティを試してください。
GNU nmは、オブジェクトファイルobjfile ....からのシンボルをリストします。オブジェクトファイルが引数としてリストされていない場合、nmはファイルa.outを想定します。 [参照]
nm -D -C -g <library>
うまくいきます。
共有ライブラリは、ライブラリロードパスまたはアプリケーションのランタイム検索パスにありますか?ダイナミックリンカーがライブラリを見つけられないようです。アプリケーションで ldd
を実行して、実行時にライブラリが見つかるかどうかを確認してくださいeg :
$ ldd /usr/bin/less
linux-gate.so.1 => (0x0072a000)
libncurses.so.5 => /lib/libncurses.so.5 (0x00c68000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x007c7000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00286000)
/lib/ld-linux.so.2 (0x002a1000)
ライブラリ検索パスの詳細については、 ld.so(8) のマニュアルページを参照してください。