0

gcc 3.4、ブースト 1.34.1 で次のエラーに遭遇した人はいますか?競合するコードは次の行に沿っています。

class Symbol
{
/// ...
bool operator<( const Symbol& rhs ) const;
};
typedef boost::function< double( const XYZ::Date& ) > F;
typedef std::map<Symbol, F> M;

M aMap; // properly instantiated
Symbol s; // properly instantied

M::const_iterator it = aMap.find( s ); // dies in this call, see below

Symbol.h:97 は bool operator<( const Symbol& ) const メンバー関数を参照し、Symbol 型の 2 つのインスタンスを比較します。これは、次の内部コンパイラ エラーを引き起こす gcc 3.4 を除くすべてのコンパイラで正常に機能します。

/XYZ/include/XYZ/AAA/Type/Symbol.h:97: 内部コンパイラ エラー: dwarf2out.c:11278 の gen_subprogram_die で

上記がWeb上で失敗する理由へのポインタを見つけようとしましたが、解決策が見つかりませんでした. 誰かが変更によってこれに出くわしましたか? または、その時点でgccコンパイラが停止する理由を誰かが指摘していますか?

助けてくれてありがとう。

/XYZ/AAA/Type/Symbol.h: In member function `bool XYZ::Symbol::operator<(const XYZ::Symbol&) const':
/XYZ/AAA/Type/Symbol.h:97:   
instantiated from `bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = XYZ::Symbol]'
/usr/local/include/c++/3.4.5/bits/stl_tree.h:1125:   
instantiated from 

`typename std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::find(const _Key&) const 
[with 
_Key = XYZ::Symbol, 
_Val = std::pair<const XYZ::Symbol, boost::function<double ()(const XYZ::Date&), std::allocator<void> > >, 
_KeyOfValue = std::_Select1st<std::pair<const XYZ::Symbol, boost::function<double ()(const XYZ::Date&), std::allocator<void> > > >, 
_Compare = std::less<XYZ::Symbol>, 
_Alloc = std::allocator<std::pair<const XYZ::Symbol, boost::function<double ()(const XYZ::Date&), std::allocator<void> > > >
]'

/usr/local/include/c++/3.4.5/bits/stl_map.h:513:  

instantiated from 

`typename std::_Rb_tree<_Key, std::pair<const I, T>, std::_Select1st<std::pair<const I, T> >, _Compare, _Alloc>::const_iterator std::map<_Key, _Tp, _Compare, _Alloc>::find(const _Key&) const 

[with 
_Key = XYZ::Symbol, 
_Tp = boost::function<double ()(const XYZ::Date&), std::allocator<void> >, 
_Compare = std::less<XYZ::Symbol>, 
_Alloc = std::allocator<std::pair<const XYZ::Symbol, boost::function<double ()(const XYZ::Date&), std::allocator<void> > > >
]'

AFunc.cpp:70:   instantiated from here
/XYZ/include/XYZ/AAA/Type/Symbol.h:97: internal compiler error: in gen_subprogram_die, at dwarf2out.c:11278
4

1 に答える 1

2

次のいずれかを試してください。

  1. gccをアップグレードしてください:)
  2. 別のコンパイラ フラグを試してください。
  3. そのヘッダー ファイルのコピーを作成し、エラーが止まるまで Symbol クラスの宣言を削除してから、そこから取り出してみてください。コンパイルしているプラ​​ットフォームで宣言せずに済むかどうかを確認してください。
  4. 特定のディストリビューションのバイナリを取得することが目標である場合は、そのディストリビューションのインストールを仮想マシンに作成し (まだ取得できる場合)、その gcc をアップグレードしてコンパイルしてみてください。

私の推奨はオプション 1 です。gcc3 の最後の公式更新は、2006 年 3 月に 3.4.6 でした。すぐに修正される予定はありません。

于 2012-04-26T04:58:33.727 に答える