3

AIXでプログラムをコンパイルしています。正常にコンパイルされますが、次の警告が表示されます。

ld: 0711-224 WARNING: Duplicate symbol: .basename
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.

「common.o」ファイルで見つけたこの記号を見つけようとしました。

nm -X64 -f common.o | fgrep '.basename'

.basename            T        3776         120

しかし、実行可能ファイルでこのシンボルを見つけると、次のことがわかります。

nm -X64 CCF | fgrep '.basename'
.basename            T  4295089984         120
.basename            T  4295174672
.basename            t  4295174672          40
  • このシンボルを含むライブラリ名を表示できますか?

  • このシンボルは私のソースファイルに存在しますか?(ばかげているように聞こえるかもしれませんが、私は本当に知りません)

私は、この質問に対する答えを、ソースで追跡できることを見つけました。

  • この警告を削除するには、どのような手順を実行する必要がありますか?また、この重複したシンボルはアプリケーションのクラッシュを引き起こす可能性がありますか?私の場合、それはクラッシュしています。
4

1 に答える 1

1

マニュアルページによると、 POSIXとGNUの2つのバージョンがありbasename()、両方でリンクしているように見えます。必要に応じて、一方を選択し、もう一方を抑制する必要があります。マニュアルページでその方法を説明しています。

動作が異なるため、一方用にコンパイルされたコードは、リンカー/ローダーがもう一方にバインドするとクラッシュする可能性があります。コンパイラーを選択できる場合は、gcc以外のコンパイラーを選択すると役立つ場合があります。

于 2012-09-27T20:35:40.057 に答える