На Linux, что может вызвать DLOPEN EMIT SIGFPE?
Вопрос
У меня есть библиотека сомнительного происхождения, которая идентифицируется file
как 32 бит исполняемый файл. Однако, когда я пытаюсь dlopen
Это на 32-битной машине CentOS 4.4, Dlopen завершается с SIGFPE
. Отказ Конечно, если что-то не так с форматом двоина, то dlopen
следует обрабатывать ошибку?
Таким образом, вопрос в том, какие проблемы могут вызвать DLOPEN EMIT SIGFPE?
Решение
Некоторые возможные причины:
- Разделение на ноль (заправить это с GDB)
- Несоответствие архитектуры (вы скомпилировали DSO сами по той же архитектуре? Или это пребуждено?)
- Проблемы совместимости ABI (загрузка DSO, построенного для одного дистрибутива Linux на другой).
Здесь Является ли интересным дискуссией в отношении генерации HASH в формате эльфа в системах GNU, где несоответствие ABI может вызвать SIGFPE на системах, когда вы смешиваете и сопоставляете DSO, не созданные на этом дистрибутиве / системе.
Запустите GDB на ваш исполняемый файл с:
]$ gdb ./my_executable
(gdb) run
Когда программа сбивает, получите обратный номер с
(gdb) bt
Если стек заканчивается в do_lookup_x ()
тогда вы, вероятно, имеете ту же проблему и должны убедиться, что ваш DSO правильный для системы, которую вы пытаетесь загрузить ее ... Однако вы говорите, что у него есть сомнительное происхождение Таким образом, проблема, вероятно, проблема ABI, аналогичной описанной.
Получить некушенную библиотеку / исполняемый файл! ;)
Удачи