При использовании опции ссылки «lazy linking» «-lazy-lz», указанной в this question, для задержки загрузки зависимой динамической библиотеки, компоновщика, который является частью Xcode 7.2.1 (версия LLVM версии 7.0.2 (clang-700.1 0,81)), генерирует сообщение об ошибке:Почему ленивый способ связывания вызывает ошибку «незаконного обращения к данным»?
ld: illegal data reference to __ZN9WBRefSpecD1Ev in lazy loaded dylib
... где подогнаны C++ символ относится к классу деструктор в моем одного класса dylib: _WBRefSpec :: ~ WBRefSpec()
Я могу» t найти прямую ссылку в любом месте, чтобы указать, что может означать эта ошибка, - или что может вызвать ее.
В файле .cpp, деструктор определяется:
EXPORT WBRefSpec::~WBRefSpec(void)
{
ClearEntireRefSpec(); // commenting out this call doesn't affect error message!
}
... где EXPORT обычная:
#define EXPORT __attribute__((visibility("default")))
... и, конечно, определенный в заголовочном файле в качестве общественного члена класса:
~ WBRefSpec (void);
Кто-нибудь когда-либо видел это или знал, что вызывает эту ошибку?
EDIT/ОТВЕТ:
Ответ на нелегальные ссылки данных, что Был .cpp файл с функцией члена класса, определенной, который объявлен «статический WBRefSpec Foo;» Удалено это и бинго, нет ошибки связи.
(удаленные детали ссылки, так как они не имеют отношения к данному вопросу)
опубликуйте, как вы строите/связываете свою полную программу, пожалуйста – xaxxon
Возможно, для работы dylib необходимо связать нелатный указатель с другим. –
@xaxxon - Установлены настройки связи (некоторые пути «санированы»). Должен ли я отформатировать его для удобства чтения? – SMGreenfield