![Close up lumberjack chopping wood with ax sawdust fly to sides harvesting wood | Embarcadero RAD Studio Delphi C++Builder Blogs close up lumberjack chopping wood with ax sawdust fly to sides harvesting wood](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2021/03/close-up-lumberjack-chopping-wood-with-ax-sawdust-fly-sides-harvesting-wood-freepik-from-hagop-3413615-scaled.jpg?resize=1140%2C694&ssl=1)
Компоновщик — это основная часть цепочки инструментов C ++ Builder — в конце концов, это часть, которая собирает выходные данные компилятора и создает ваш окончательный двоичный файл, поэтому трудно недооценить его важность! — и поскольку он объединяет все приложение одновременно, он может использовать много памяти. C ++ Builder 10.4.2 — не первый выпуск, в котором мы ввели улучшения компоновщика: сделав компоновщик распознающим большой адрес , настроив компоновщик для современных типичных приложений и документируя полезные флаги для настройки поведения компоновщика, если вы обнаружите, что компоновщик борется с ваше приложение. (Не говоря уже о добавлении полезных функций, таких как обнаружение сочетаний классических и лязгающих объектов при связывании, что помогает выявить невидимую проблему, влияющую на стабильность времени выполнения вашего приложения, т. е. используйте это, чтобы убедиться, что ваше приложение не содержит распространенной ошибки и является стабильным.)
В C ++ Builder 10.4.2 мы значительно улучшили компоновщик Win64, известный как Split DWARF, который мы переносим в Windows из мира Unix.
Почему странные имена?
Объектные файлы — скомпилированная форма каждой единицы компиляции, то есть каждый файл .cpp — хранятся в разных объектных форматах. В Win64 C ++ Builder использует 64-битный ELF, который обычно используется в Linux. Он расшифровывается как Executable and Linkable Format, но мы подозреваем, что его истинное происхождение принадлежит поклонникам Толкина — потому что вспомогательный формат отладочной информации для хранения отладочной информации для каждого объекта называется DWARF. Это определенно игра слов (см. Страницу 2 этого PDF-файла ).
Split DWARF — это не результат драки в таверне D&D или даже романа Кальвино . Фактически, это способ разделения отладочной информации, чтобы компоновщику не приходилось ее обрабатывать.
Это секрет. Как лучше всего уменьшить объем памяти, необходимый компоновщику при связывании вашего приложения?
Это почти до смешного просто. Давая меньше ссылки.
Разделение отладочной информации
Как правило, при создании приложения в режиме отладки или с любыми модулями с включенной отладочной информацией информация об отладке содержится в объектном файле вместе со скомпилированным кодом. Компоновщик читает оба файла и создает окончательный двоичный файл — ваш EXE или DLL, который также содержит как скомпилированный код, так и отладочную информацию. Это основная причина, по которой отладочный EXE намного больше, чем обычное приложение в режиме выпуска.
Split DWARF обрабатывает объектный файл и разбивает отладочную информацию в отдельный файл, который находится рядом, файл .dwo. В исходном объектном файле остается крошечная заглушка, которую отладчик может прочитать, чтобы узнать, где найти отладочную информацию.
Чтобы включить его, в параметрах проекта выберите «Сборка»> «Компилятор C ++»> «Отладка» и найдите параметр «Использовать разделение DWARF».
Включи это.
Разверните параметр (щелкните значок>) и выберите абсолютный путь, по которому должна идти отладочная информация, то есть создайте путь, который не является относительным путем, например, начинается с c: или d :. Это необходимо для того, чтобы отладчик мог найти отладочную информацию.
Вот и все. Для получения дополнительной информации вы можете найти нашу документацию здесь . Вы можете использовать новый замечательный отладчик Win64 (с потрясающими функциями, такими как проверка типов STL — после этого блога было добавлено больше), давая вашему компоновщику гораздо меньше возможностей для связывания в C ++ Builder 10.4.2!
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition