Некоторые возможные причины:
- Деление на ноль (исключить это с помощью GDB)
- Несоответствие архитектуры (вы сами скомпилировали DSO на той же архитектуре? Или это предварительно?)
- Проблемы совместимости ABI (загрузка DSO, созданного для одного дистрибутива Linux, в другом).
Здесь - интересное обсуждение, касающееся генерации хеша в формате ELF в системах GNU, где несовпадение ABI может вызвать SIGFPE в системах, когда вы смешиваете и сопоставляете DSO, не построенные в этом дистрибутиве / системе.
Запустите GDB для вашего исполняемого файла с помощью:
]$ gdb ./my_executable
(gdb) run
Когда программа вылетает, вернитесь назад с помощью
(gdb) bt
Если стек заканчивается do_lookup_x ()
, то, вероятно, у вас возникла та же проблема, и вы должны убедиться, что ваш DSO подходит для системы, в которую вы пытаетесь его загрузить ... Однако вы говорите, что у него сомнительные источники так что проблема, вероятно, является проблемой ABI, аналогичной описанной.
Получить сомнительную библиотеку / исполняемый файл! ;)
Удачи