У меня есть приложение, разработанное под Linux с GCC 4.2, которое довольно интенсивно использует потоковые потоки для упаковки и развертывания данных, передаваемых по проводам. (Потому что Grid API, который я использую, требует этого). Под Linux все нормально, но когда я развертываюсь в SunOS (v5.10 с SPARC) и компилирую с GCC 3.4.6, приложение зависает, когда достигает точки, в которой используются струнные потоки.
**** Новая информация добавлена 07.09.2010 ****
Так что я до сих пор не решил, но после долгих раздумий я наконец нашел подсказку. На самом деле я думаю, что нашел проблему, но я не знаю, как ее исправить! Смотрите вывод компоновщика ниже:
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 для обработки каждого запроса. Дочерний поток использует строковые потоки для упаковки данных. Когда дочерняя нить достигает этой точки, она, кажется, висит на секунду, а затем умирает. Основной поток не затрагивается.
Есть ли какие-либо известные проблемы с stringstream и GCC 3.4.6 или SunOS или SPARC? Я еще ничего не нашел ...
Кто-нибудь может предложить лучший способ упаковки и распаковки больших объемов данных в виде строк или байтов?
Извините за то, что не публикуем код, но это мне кажется более сложным, чем простая синтаксическая ошибка. Все равно нить вылетает:
std::stringstream mystringstream; //not here
mystringstream << "some data: "; //but here
То есть я могу объявить поток строк, но когда я пытаюсь его использовать, что-то идет не так.