У меня есть статическая библиотека C++ (lib_static.a), которая определяет
несколько одноэлементных классов и глобальные статические переменные, такие как std::string и std::vector внутри класса что этот синглтон использует и имеет к нему доступ. Например, static const объявляется внутри класса и определяется внутри единицы перевода.
Эта статическая библиотека (lib_static.a) построена как PIC (код, независимый от позиции).
Если я свяжу lib_static.a с двумя разными общими библиотеками (liba.so, libb.so)
а затем я свяжу эти две общие библиотеки с моим фиктивным исполняемым файлом в Linux
Я получу ошибку сегментации, и если я запущу valgrind, он скажет, что
есть Invalid free()/delete/delete[]/realloc()
на этих std::string и векторах.
Почему? что не так и что происходит?
Я, очевидно, знаю, что синглтоны — это первый тревожный сигнал, но мне просто было любопытно понять поведение общих библиотек. Может быть, это имеет отношение к «фиаско порядка статической инициализации»?
Подробнее здесь: https://stackoverflow.com/questions/786 ... d-librarie
Множественные экземпляры статических данных, вызывающие ошибки сегментации в общих библиотеках ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как можно обнаружить/предотвратить несколько определений в статических библиотеках?
Anonymous » » в форуме C++ - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как можно обнаружить/предотвратить несколько определений в статических библиотеках?
Anonymous » » в форуме C++ - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как можно обнаружить/предотвратить несколько определений в статических библиотеках?
Anonymous » » в форуме C++ - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как можно обнаружить/предотвратить несколько определений в статических библиотеках?
Anonymous » » в форуме C++ - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-