Использование 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
вывод, есть две вещи, чтобы увидеть:
LC_LOAD_DYLIB
Команды, которые показывают имена библиотек для включения.
Команда загрузки может показывать абсолютный путь к файлу или может иметь префикс@rpath/
это ярлык, используемый для поиска файлов.LC_RPATH
который показывает путь поиска для имен библиотек с префиксом@rpath/
,
Вы можете изменить LC_RPATH
в том числе -rpath {absolute_path_to_files}
в Other Linker Flags
поле в настройках вашей сборки (как временное решение для повторной компиляции). Для меня это означало установку rpath для файлов библиотеки в соответствующих файлах SDK, а не /System
, Это чревато опасностями по ряду причин. Так что не забудьте отменить это.
Вы можете использовать более легкий подход, если у вас просто проблемы с иерархиями сборки. С помощью otool
вы можете видеть, что на самом деле происходит, поэтому вы можете разумно изменить Runpath Search Paths
Настройка сборки, чтобы перейти к одному или двум каталогам и посмотреть, как это влияет на вывод компоновщика.