Если вы когда-либо пытались использовать утилиту nm в какой-либо программе на C++, вы, вероятно, заметили, что многие символы идентифицируются как «V» или «W». Оба являются разными типами слабых символов.
Теперь иметь тонны слабых символов в исполняемом файле плохо, так как во время выполнения динамический компоновщик попытается разрешить их все. Я подумал, что можно было бы сэкономить много времени, применяя простое соглашение при связывании исполняемых файлов:
- Всякий раз, когда в исполняемом файле будет создан слабый символ, если такой символ имеет значение по умолчанию, повысьте его до обычного символа.
Этот хак мне кажется безопасным, так как:
- Если какая-либо библиотека определяет слабый символ с тем же именем, он будет переопределен продвинутым, и это нормально, поскольку для слабых символов мы можем выбрать любое определение.
- Если ни одна библиотека на самом деле не определяет такой символ... ничего особенного не происходит
- Если библиотеки определяют слабые символы, которые не определены в исполняемом файле, все работает как обычно.
Прежде чем я попытаюсь обсудить это с разработчиками binutils, есть ли огромная ошибка, которую я упускаю?