У меня есть инструмент командной строки, который я создал с помощью Xcode, который связан с некоторыми фреймворками Apple.Mac OS X - привязка исполняемого файла к другой динамической библиотеке, загрузка как старых, так и новых
В качестве «личного эксперимента» (просто пытающегося понять, как работают динамические библиотеки) я попытался указать исполняемый файл на другую версию тех же фреймворков.
Допустим, например, что исполняемый EXEC использует LIB_A и последний использует LIB_B.
Я сделал копию как LIB_A и LIB_B размещения их в другой (короткий) путь к папке.
Я использовал otool -L
для получения зависимостей и идентификаторов библиотек.
Затем я использовал install_name_tool
с директивой -id
изменить идентификаторы нового LIB_A и LIB_B (в основном только изменяя путь, ведущий в качестве имени не изменилось).
Затем с директивой -change
Я позволяю новый LIB_A, чтобы указать на новый LIB_B и позволить исполняемым EXEC, чтобы указать на новый LIB_A.
Таким образом, я думал, что все дерево зависимостей должно быть правильно воссоздано.
install_name_tool
не вернулся ошибок и проверки исполняемого файла и новые библиотеки с otool
все они указывают на правильный путь.
К сожалению, исполняемый файл EXEC много ошибок передаются на консоль относительно дублирующего определения классов. Так же, как старые библиотеки и новые были загружены как.
Наконец, все аварии с Трассировка/BPT ловушку: 5
Например:
objc[25992]: Class NSAppleEventManager is implemented in both
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation and
/xyz/Foundation.
One of the two will be used. Which one is undefined.
Если я вызываю
export DYLD_PRINT_LIBRARIES=1
я вижу в исполнении, что на самом деле библиотеки загружаются в два раза ,