Что означают флаги "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 " Линкеры и загрузчики" Джона Левина.

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