5

32 ビット SLES10 マシンでビルドを行っています。GCC 3.4.2 の使用

ここにエラーの例があります

`.L8245' referenced in section `.rodata' of CMakeFiles/myproj.dir/c++/util/MyObj.o: defined in discarded section
 `.gnu.linkonce.t._ZN5boost9re_detail9reg_grep2INS0_21grep_search_predicateIPKcSaIcEEES4_cNS_12regex_traitsIcEES5_S5_EEjT_T0_SA_RKNS_14reg_expressionIT1_T2_T3_EEjT4_' of CMakeFiles/myproj.dir/c++/util/MyObj.o
4

2 に答える 2

6

これは通常、2 つの異なる .cpp が異なるコンパイラ スイッチでコンパイルされているためですが、同じテンプレートも使用しています。生成されたテンプレートのインスタンス化は、定義/参照するものが異なる場合があり、選択されたインスタンス化が破棄されたシンボルとまったく同じシンボルを定義/参照していない場合、このエラーが発生する可能性があります。

すべての .cpp がまったく同じコンパイラ スイッチと定義でコンパイルされていることを確認します。これが不可能な場合は、リンカー コマンドラインで .obj ファイルの順序を変更します。特に、エラー メッセージに記載されている .obj ファイルを .obj ファイル リストの末尾または先頭に移動してみてください。

編集:

また、ビルド済みの C++ ライブラリに対してリンクしている場合は、これらのライブラリのビルドに使用されるコンパイラ スイッチを複製できるかどうかを確認してください。

于 2011-03-17T01:47:03.453 に答える
3

これは、新しいバージョンの binutils を使用していることが原因である可能性があります。binutils バージョン 2.15 はこれを致命的ではないエラーとして扱いましたが、それ以降のバージョンの binutils が変更されたため、リンクが失敗し始めました。同様のレポートについては、https://bugzilla.redhat.com/show_bug.cgi?id=191618を参照してください。

私の場合、binutils 2.17 の代わりに binutils 2.16.1 を明示的に使用することで、もう一度リンクすることができました。

于 2011-08-15T14:17:01.643 に答える