У меня есть код, написанный на C ++, который генерирует файл sharedlib (.so), который, в свою очередь, используется в моем приложении, которое работает на RHEL3.
Теперь мне нужно перейти на RHEL5. Код для файла .so успешно компилируется, но когда я пытаюсь запустить свои сервисы, он показывает **glibc поврежденный двойной связанный список** но сервисы запускаются успешно.
Может ли это быть связано с ОС, так как тот же код для того же .so, скомпилированного в RHEL3, работает нормально.
Также, если я скопирую файл .so, скомпилированный в RHEL3, на машину RHEL5, все будет работать нормально.
This is what i got by running valgrind :
==19845== Invalid read of size 4
==19845== at 0x453F4EC: std::_Rb_tree<int, std::pair<int const, key>, std::_Select1st<std::pair<int const, key> >, std::less<int>, std::allocator<std::pair<int const, key> > >::_S_right(std::_Rb_tree_node_base*) (in /home/test/examplesofile1.so)
==19845== by 0x45408AA: std::_Rb_tree<int, std::pair<int const, key>, std::_Select1st<std::pair<int const, key> >, std::less<int>, std::allocator<std::pair<int const, key> > >::_M_erase(std::_Rb_tree_node<std::pair<int const, key> >*) (in /home/test/examplesofile1.so)
==19845== by 0x4540918: std::_Rb_tree<int, std::pair<int const, key>, std::_Select1st<std::pair<int const, key> >, std::less<int>, std::allocator<std::pair<int const, key> > >::~_Rb_tree() (in /home/test/examplesofile1.so)
==19845== by 0x4540974: std::map<int, key, std::less<int>, std::allocator<std::pair<int const, key> > >::~map() (in /home/test/examplesofile1.so)
==19845== by 0x48235FB: (within /home/test/examplesofile2.so)
==19845== by 0xAA5058: __cxa_finalize (in /lib/libc-2.5.so)
==19845== by 0x477BC03: (within /home/test/examplesofile2.so)
==19845== by 0x4A2FDEB: (within /home/test/examplesofile2.so)
==19845== by 0xA697CD: _dl_fini (in /lib/ld-2.5.so)
==19845== by 0xAA4DA8: exit (in /lib/libc-2.5.so)
==19845== by 0x8086F57: vMakeDaemon (commonfunctions.c:438)
==19845== by 0x8067F9A: Initialize (mngr.c:360)
В большинстве случаев это означает, что некоторая память освобождается дважды.
Так что ошибка, скорее всего, в вашем коде.
Попробуйте перекомпилировать вашу библиотеку на новой системе и используйте valgrind, чтобы найти причину проблемы.
Других решений пока нет …