Что означают флаги "binds_to_weak" и "weak_defines" в выводе otool?
После использования команды ниже я получаю два флага как "binds_to_weak" и "weak_defines". каково их значение?
$ otool -hv
(архитектура armv7): Волшебный заголовок Mach cputpe Тип cpusubtype caps Тип файла ncmds sizeofcmds flags MH_MAGIC ARM V7 0x00 ВЫПОЛНИТЬ 38 4292 NOUNDEFS DYLDLINK TWOLEVEL WEAK_DEFINES BINDS_TO_WEAK PIE
1 ответ
MH_WEAK_DEFINES означает, что исполняемый файл имеет слабый символ. Слабые символы - это хитрость компоновщика, позволяющая избежать связывания в поддерживаемом коде, который не используется. Например, компилятор выполняет анализ и определяет, что приложение является только целочисленным, и указывает компоновщику не ссылаться в коде поддержки с плавающей запятой. Из Руководства по компоновщикам и библиотекам Oracle® Solaris 11.4 (в котором речь не идет о Mach-O):
Исторически слабые символы использовались, чтобы обойти взаимное расположение или проверить дополнительные функции. Однако опыт показал, что слабые символы хрупки и ненадежны в современных средах программирования, и их использование не рекомендуется.
Это лучше объясняется в главе 6 " Линкеры и загрузчики" Джона Левина.