Использование CocoaLumberjack в инструменте командной строки Swift вызывает ошибку времени выполнения: dyld: библиотека не загружена: @rpath/libswiftAppKit.dylib

У меня есть инструмент командной строки, написанный на Swift. Я использую Lumberjack в других связанных приложениях, поэтому я бы хотел, чтобы он работал в этом. Инструмент командной строки не импортирует AppKit. Согласно файлу DDTTYLogger.h, если определен DD_CLI, пользовательские цветовые определения. (CLIColor.h/m) импортируются, а не AppKit/NSColor.h, поэтому кажется, что я не должен получить ошибку.

До сих пор я пытался добавить –DDD_CLI в компилятор Swift, другие флаги Swift. Я также попытался добавить CLIColor.m в сборку. Я в растерянности... У кого-нибудь есть опыт с этим, или есть другие вещи, которые я могу попробовать?

Я ценю ваши отзывы.

1 ответ

Я столкнулся с этим с помощью бета-версии Xcode 8, работающей на OS X 10.11.6, и, хотя у меня была специфическая проблема, способ ее устранения одинаков для всех случаев.

otool Команда может быть использована, чтобы увидеть , где именно компоновщик получил указание искать файлы библиотеки вместе с их именами.

Для меня, otool -l {executable_path} показал, что ищет файлы в /System/Library/PrivateFrameworks/swift который был введен в 10.12 (Сьерра). Так как я работаю 10.11.6, это showtopper. (И известная ошибка в бета-версии Xcode 8)

Глядя на otool вывод, есть две вещи, чтобы увидеть:

  1. LC_LOAD_DYLIB Команды, которые показывают имена библиотек для включения.
    Команда загрузки может показывать абсолютный путь к файлу или может иметь префикс @rpath/ это ярлык, используемый для поиска файлов.
  2. LC_RPATH который показывает путь поиска для имен библиотек с префиксом @rpath/,

Вы можете изменить LC_RPATH в том числе -rpath {absolute_path_to_files} в Other Linker Flags поле в настройках вашей сборки (как временное решение для повторной компиляции). Для меня это означало установку rpath для файлов библиотеки в соответствующих файлах SDK, а не /System, Это чревато опасностями по ряду причин. Так что не забудьте отменить это.

Вы можете использовать более легкий подход, если у вас просто проблемы с иерархиями сборки. С помощью otool вы можете видеть, что на самом деле происходит, поэтому вы можете разумно изменить Runpath Search Paths Настройка сборки, чтобы перейти к одному или двум каталогам и посмотреть, как это влияет на вывод компоновщика.

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