1

g++4.7でdmallocを使用しようとしています。

私が受け取っているエラーメッセージは次のとおりです。

/usr/include/dmalloc.h:457:32: error: declaration of 'char* strdup(const char*)' has a different exception specifier
/usr/include/string.h:130:14: error: from previous declaration 'char* strdup(const char*) throw ()'
  1. C関数が例外をスローするのはなぜですか?
  2. コンパイル時にthrow()指定子を無視するようにコンパイラに指示することはできますか?

...または、どういうわけかdmallocにパッチを適用する必要がありますか?

4

2 に答える 2

1

C関数は例外をスローしませんが、例外はC関数フレーム全体に伝播する可能性があります。throw()仕様は、関数によって生成されたか、チェーン内の他の関数によって生成されたかに関係なく、この関数から例外が発生しないことをコンパイラーに通知します。

この場合、C ++ソースをコンパイルしています。これには、Cリンケージを持つ関数の外部宣言が含まれています。これだけでは、コンパイラは、関数を含むライブラリについても、その関数を実装するために使用される言語についても結論を出すことができません。したがって、コンパイラは例外について何も想定できず、コードを保守的にコンパイルする必要があります。 )スペックはそこに置かれていません。

dmallocを更新および/またはパッチする必要があります。

于 2012-11-12T17:04:27.337 に答える
0

の宣言を削除strdupdmalloc.hます。動作しなくなったCライブラリでトリックを実行しているようです。

于 2012-11-12T17:15:19.630 に答える