dyld: привязка ленивого символа не удалась: символ не найден - нм сообщает, что символ найден

Здесь довольно абстрактный вопрос, так как я не знаю, с чего начать собственное расследование.

У меня есть пакет C, созданный с помощью CMake, который создает librpdb.so; У меня есть Ruby Gem, настроенный для той же библиотеки, которая производит rpdb.bundle.

При использовании в Ruby я получаю это:

dyld: lazy symbol binding failed: Symbol not found: _RPDB_RuntimeStorageController_sharedInstance
  Referenced from: /usr/local/lib/ruby/gems/1.9.1/gems/rpdb-0.1.0/lib/rpdb/rpdb.bundle
  Expected in: flat namespace

Когда я смотрю в библиотеку, NM сообщает:

000000000000ea40 T _RPDB_RuntimeStorageController_sharedInstance

Таким образом, кажется, что символ действительно находится в библиотеке. Почему же тогда сбой связывания?

1 ответ

Решение

Проще говоря, связывание не происходило на уровне первой библиотеки, хотя и не так много сообщало, потому что заголовки были найдены соответствующим образом.

Подробнее о том, почему это происходило в моих обстоятельствах, здесь

а также здесь

Другие вопросы по тегам