что означают флаги "binds_to_weak" и "weak_defines" в выводе otool? - PullRequest
0 голосов
/ 09 декабря 2018

после использования команды, приведенной ниже, я получаю два флага: "binds_to_weak" и "weak_defines".в чем их значение?

$ otool -hv

(архитектура armv7): заголовок Mach magic cutype cpusubtype caps filetype ncmds sizeofcmds flags MH_MAGIC ARM V7 0x00 ВЫПОЛНИТЬ 38 4292 NOUNDEFINS TWOLEDWWW1005 *

1 Ответ

0 голосов
/ 04 января 2019

MH_WEAK_DEFINES означает, что исполняемый файл имеет слабый символ .Слабые символы - это хитрость компоновщика, позволяющая избежать связывания в поддерживаемом коде, который не используется.Например, компилятор выполняет анализ и определяет, что приложение является только целочисленным, и указывает компоновщику не ссылаться в коде поддержки с плавающей запятой.Из Oracle® Solaris 11.4 Руководство по компоновщикам и библиотекам (в котором не говорится о Mach-O):

Исторически слабые символы использовались, чтобы обойти взаимное расположение или проверитьнеобязательный функционал.Однако опыт показал, что слабые символы хрупки и ненадежны в современных средах программирования, и их использование не рекомендуется.

Это лучше объяснено в главе 6 Линкеры и загрузчики Джона Левина .

...