2009-08-06 6 views
8

gcc 3.2.3をbinutils 2.18と使用して共有ライブラリをリンクする際に問題があります。セクションに.rodataで参照リンカの失敗に関するヘルプ:.gnu.linkonce.t

.gnu.linkonce.t _...::私は、私は次のエラーを取得するライブラリをリンクしようとすると...捨てセクション.gnu.linkonce.tに

Iを定義しこれに関してかなりの量のグーグルグーグルが行われており、ほとんどの場所が2.1.5.50で修正されたbinutils 2.17以降の回帰であることを示しているようですが、 binutilsとgccに触れる。

ありがとうございました。

答えて

6

これは、システムがgccと異なるbinutilsとの不一致を引き起こしたという奇妙な結果でした。パス内の/ usr/binの前に/ usr/local/binがあるため、/ usr/bin/gccが使用されていて(3.2.3)、/ usr/local/bin/ldが使用されていました。/usr/binがパスの先頭にあるように切り替えると、適切な/ usr/bin/ldが呼び出され(binutils 2.14)、これが問題を解決したように見えます。

0

このバグが見つかりました。ここに報告されました。GCC bugzillaは、このバグに焦点を当てた小さなテストケースがコメントに記載されており、時間を無駄にしないように助けてくれました。このバグはGCC 3.4.6から修正されました。

GCC 3.3.1binutils 2.15.92binutils 2.17.50を使用しているときにこの問題が発生し、両方とも機能しませんでした。それで、私にとっては、明らかに問題を起こしたGCCbinutilsバージョンの組み合わせではありませんでした。

古いバージョンのGCCを使用する必要がある場合は、H.J.で提供されているこの修正プログラムを手動で使用し、古いGCCを再構築してください。

Fix without COMDAT group

Fix with COMDAT group

修正のための正確な差分を示しているリンク内の添付を確認してください。

私はそれを自分でやってテストしたところ、GCC 3.3.1に「COMDATグループなし」の最初の修正をパッチして再構築し、binutils 2.15.92binutils 2.17.50で使用しました。