0

25個のオブジェクトファイルを組み合わせて1つの共有ライブラリを形成しています。gccで共有ライブラリを生成し、 nm -D libmylib.soで公開されたシンボルを探していたときに、.bssセクションにiyという名前の2つの望ましくない公開されたシンボルが見つかりました。私は自分のソースファイルでそれらを見つけようとしましたが、見つけることができないので、誰かがこれらの望ましくない露出されたシンボルを正確に持っている.oファイルを見つける方法があるかどうか教えてくれますか?nmでそれを行うことはできますか、それとも別のツールが必要ですか?

どんな助けでもいただければ幸いです。

4

2 に答える 2

1

オブジェクトファイルのあるディレクトリで、次を実行できます。

find . -name '*.o' -exec nm -D {} \; -print

これにより、シンボルとファイル名が出力されます

于 2012-11-13T19:49:40.187 に答える
1

共有ライブラリがリンクされると、共有ライブラリのどの部分がどのオブジェクト ファイルからのものかわかりません。

ライブラリを構築する個々のオブジェクトを検索できます。

find . -name '*.o' -print0 | xargs -0 nm -A | egrep ' (i|y)$'

それらが定義されたときにリンカーに通知するように依頼できます。

$(CC) -fPIC -shared -o libmy.so $(OBJS) -Wl,-y,i,-y,y

でコンパイルされたオブジェクトからライブラリを構築した場合、どこから来たの-gかを GDB に尋ねることができます。iy

gdb -q libmy.so
(gdb) info var ^i$
(gdb) info var ^y$
于 2012-11-14T05:38:25.000 に答える