C++ std::stringstream 似乎导致线程在 SunOS 下挂起或死亡

标签 c++ gcc stringstream pthreads sunos

我有一个在 Linux 下使用 GCC 4.2 开发的应用程序,它大量使用字符串流来包装和解包通过网络发送的数据。 (因为我使用的 Grid API 需要它)。在 Linux 下一切正常,但是当我部署到 SunOS(v5.10 运行 SPARC)并使用 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

所以警告说两个库之间的 iostream 等定义不匹配,但是如何修复或覆盖其中一个。 ****结束新信息****

更详细地说:主线程接受来自客户端的请求并启动一个新的 pthread 来处理每个请求。子线程使用stringstreams打包数据。当子线程到达那个点时,它似乎会挂起一秒钟然后死掉。主线程不受影响。

stringstream 和 GCC 3.4.6 或 SunOS 或 SPARC 是否存在任何已知问题?我还没有找到任何东西......

谁能建议一种更好的方法来打包和解包大量数据字符串或字节流?

很抱歉没有发布代码,但这对我来说似乎比简单的语法错误更复杂。尽管如此,线程崩溃了:

std::stringstream mystringstream;  //not here
mystringstream << "some data: ";   //but here

也就是说,我可以声明字符串流,但是当我尝试使用它时出现问题。

最佳答案

可能您要放入流中的“某些数据”无效(例如已经释放或未正确分配的char*/...)或数据被修改同时使用不同的线程。

关于C++ std::stringstream 似乎导致线程在 SunOS 下挂起或死亡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2731221/

相关文章:

c++ - 使用 gcc4.2 在 OsX 10.9 上编译 Qt5.2 项目?

c - 是否有 GNU ARM NEON 内在函数的 C 实现?

c++ - 为什么 GCC 不允许我创建 `inline static std::stringstream` ?

c++ - 将 sdl 与 g++ 链接时出现错误

c++ - 链接器错误: Undefined reference/bad reloc address/ld returned 1 exit

c++ - 成员函数指针的静态成员数组

c++ - 带有 ofstream 和系统命令的 Openmp

c++ - 将 vector<bool> 转换为十进制(作为字符串)

c++ - 哪个版本的 GNU GCC 支持 TR1 外部模板?

c++ - stringstream 内部是如何工作的?