LD_BIND_NOW: ошибка поиска символа, но исполняемый файл все еще работает

0

Я пытаюсь диагностировать ошибки компоновщика/времени выполнения, используя setenv LD_BIND_NOW TRUE. Когда я запускаю исполняемый файл с включенной опцией, я получаю ошибку

   lib/libmkl_intel_thread.so: error: symbol lookup error: undefined symbol: DftiFreeDescriptor (fatal)

Однако, если я LD_BIND_NOW переменную окружения LD_BIND_NOW, программа выполняется просто отлично (до завершения, после чего она сообщает о повреждении памяти, хотя это может быть не связано).

Поэтому я немного смущен: как программа выполняется, когда у нее есть ошибка поиска символа? Я думал, что это должно закончиться, поскольку программа написана в C++, а не в Java. (См. Здесь для справки.)

Кроме того, означает ли эта ошибка, что мой rpath установлен неправильно, или MKL был построен неправильно? Есть ли решение, которое может быть достигнуто в ограниченное время?

Теги:
intel-mkl

1 ответ

1

Во-первых, я думал, что вам нужен LD_BIND_NOW=1 (в отличие от TRUE, хотя это может быть синоним).

Во-вторых, хотя ваше приложение не было связано, если бы был неразрешенный символ, возможно ли, что вы сделали некоторую форму обновления разделяемой библиотеки, чтобы одна из используемых библиотек теперь использует библиотеку в свою очередь с неразрешенным символом? Или что он использует другую библиотеку для того, с чем она была связана?

  • 0
    LD_BIND_NOW=1 - синтаксическая ошибка в RHEL; это правильный синтаксис в других дистрибутивах. Как определить, выполнил ли я обновление совместно используемой библиотеки, в результате чего одна библиотека использовала другую с неразрешенным символом?
  • 0
    Попробуйте objdump -T на исполняемом файле (или вызывающей библиотеке) и вызываемой библиотеке и посмотрите, действительно ли исполняемый файл ссылается на символ, который библиотека не предоставляет.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню