私は、GCC 4.2 を使用して Linux で開発されたアプリケーションを持っています。これは、文字列ストリームを非常に頻繁に使用して、ネットワーク上で送信されるデータをラップおよびアンラップします。(私が使用している Grid API がそれを要求するため)。Linux ではすべて問題ありませんが、SunOS (SPARC を実行する v5.10) に展開して GCC 3.4.6 でコンパイルすると、文字列ストリームが使用されるポイントに到達するとアプリがハングします。
**** 2010 年 9 月 7 日に追加された新しい情報 **** それで、私はまだこれを解決していませんでしたが、いろいろいじくり回した後、ようやく手がかりを見つけました。実際、私は問題を見つけたと思いますが、それを修正する方法が途方に暮れています! 以下のリンカー出力を参照してください。
ld: warning: symbol `typeinfo for std::basic_iostream<char, std::char_traits<char> >' has differing sizes:
(file /home/roony/dssdk/cppdriver/lib/libdsDriverGCC3.so value=0x28; file /usr/sfw/lib/libstdc++.so value=0x20);
/home/roony/dssdk/cppdriver/lib/libdsDriverGCC3.so definition taken
したがって、警告は、2 つのライブラリ間で iostream などの定義に不一致があることを示していますが、どちらか一方を修正またはオーバーライドする方法.. ****新しい情報の終わり****
詳細: メイン スレッドはクライアントからの要求を受け取り、新しい pthread を開始して各要求を処理します。子スレッドは、stringstreams を使用してデータをパックします。子スレッドがそのポイントに到達すると、1 秒間ハングしてから終了するように見えます。メインスレッドは影響を受けません。
stringstream と GCC 3.4.6 または SunOS または SPARC に関する既知の問題はありますか? まだ何も見つかりませんでした...
大量のデータを文字列またはバイトストリームにパックおよびアンパックするより良い方法を誰かが提案できますか?
コードを投稿していないことをお詫びしますが、これは単純な構文エラーよりも複雑なようです。それでも、スレッドはクラッシュします。
std::stringstream mystringstream; //not here
mystringstream << "some data: "; //but here
つまり、stringstream を宣言することはできますが、それを使用しようとすると何か問題が発生します。