0
同じ静的オブジェクトファイルに重複シンボルがあるのはなぜですか?実際にはどういう意味ですか?1つの静的オブジェクトライブラリに複数の重複シンボルがある
nm /lib64/libc.so.6 | cut -d' ' -f 3 | uniq -c | sort -rn
を実行すると、ファイル内のシンボルが検索され、シンボルの発生回数が表示されます。私は次のような結果を得ます。
59 lock
38 buffer
15 free_mem
15 __elf_set___libc_subfreeres_element_free_mem__
2 __strftime_internal
2 startp_initialized.9864
2 startp_initialized.11643
2 null
2 nbits.11331
更新
00000000003c1b98 b lock
00000000003c1bb0 b lock
...
00000000003c2690 b lock
00000000003c1710 b buffer
00000000003c1718 b buffer
...
00000000003c1720 b buffer
00000000003bc768 d __elf_set___libc_subfreeres_element_free_mem__
...
00000000003bc770 d __elf_set___libc_subfreeres_element_free_mem__
00000000003bc778 d __elf_set___libc_subfreeres_element_free_mem__
...
00000000001899de r null
0000000000191e70 r null
アップデート2(おそらく有用):
readelf -Ws /lib64/libc.so.6 | grep .*\ buffer$
Num: Value Size Type Bind Vis Ndx Name
1277: 00000000003c1710 8 OBJECT LOCAL DEFAULT 35 buffer
1289: 00000000003c1718 8 OBJECT LOCAL DEFAULT 35 buffer
1293: 00000000003c1720 8 OBJECT LOCAL DEFAULT 35 buffer
1298: 00000000003c1728 8 OBJECT LOCAL DEFAULT 35 buffer
1319: 00000000003c1730 8 OBJECT LOCAL DEFAULT 35 buffer
...
「重複」の一部は定義(通常は1つだけ)であり、もう1つはその単一の定義への参照である可能性があります。 'nm'出力からその情報を切り捨てるので、あなたはそれを知りません。 –
特に、外部参照( 'U')と週オブジェクト(' w'、 'W'、' v'、 'V')のすべての出現をフィルタリングするのを忘れました。それらは相互参照であり、重複ではありません。 – dhke
あなたが見ているシンボルは '静的な'グローバルシンボルですか?したがって、重複があっても、単一の翻訳単位にローカルなので、衝突しません。これらの変数の* storage *は、通常はグローバルデータセグメントまたはbssセグメントのどこかに置く必要があります。 –