dyld: неудачная привязка ленивых символов при попытке установить c ссылку на dylib в swift - PullRequest
0 голосов
/ 08 апреля 2020

Я собрал файл dylib, используя fpcupdeluxe бесплатно pascal, используя только одну функцию cdecl _test, доступную как на 1) MacOS, так и на 2) Debian (кросс-скомпилировано в x86_64 darwin)

Я попытался вызвать dylib с помощью 1) dlopen 2) Соединительный заголовок 3) Framework

dylib, скомпилированный на MacOS, работал со всеми 3 методами. Однако, когда я заменил этот dylib на тот, который я кросс-компилировал в debian, похоже, что работает только dlopen, другие 2 метода, использующие заголовочный мост и инфраструктуру, дали мне эту ошибку: dyld: ленивое связывание символов не удалось: Символ не найден: _test

Я сделал nm -gU для обоих dylib, и только относительный виртуальный адрес функции _test отличается, что я могу сделать, чтобы выяснить причину этого и устранить ее?

otool -L для

Не работает

XXXXX.dylib: /home/wire/fpcupdeluxe/projects/XXXXX.dylib (совместимость версия 0.0.0, текущая версия 0.0.0) / System / Library / Frameworks / AppKit.framework / Versions / C / AppKit (версия совместимости 45.0.0, текущая версия 1404.0.0) /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (версия совместимости 300.0.0, текущая версия 1252.0.0 ) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (версия совместимости 150.0.0, текущая версия 1253.0.0) /usr/lib/libSystem.B.dylib ( версия совместимости 1.0.0, текущая версия 1225.1.1)

Рабочая

/ Users / wire / XXXXX.dylib: /Users/wire/XXXXX.dylib (версия совместимости 0.0.0, текущая версия 0.0.0) /usr/lib/libSystem.B.dylib (совместимость версия 1.0.0, текущая версия 1281.100.1)

Где XXXXX - это имя моей библиотеки, я также заметил, что путь отличается для рабочий и нерабочий. В нерабочем режиме мой dylib указывает на каталог на моем компьютере linux, который не должен присутствовать на компьютере ma c. Я также попытался выполнить кросс-компиляцию на windows, и путь был в C: \, и ошибка была, изображение не найдено, я должен изменить этот путь? Я новичок в программировании на MacOS

1 Ответ

0 голосов
/ 12 апреля 2020

Благодаря Kamil.S я нашел решение, которое мне просто нужно было запустить install_name_tool -id @ rpath /, чтобы установить его в относительный путь, поскольку в отличие от windows все пути к динамическим c библиотекам хранятся в сама структура мачо

...