Как компоновщик подключает библиотеки? (VC++ 6.0)
От: Fisher  
Дата: 24.07.02 08:10
Оценка:
Только-только начал разбираться с С(С++). Поэтому не судите строго.
Такой вопрос: в опциях компоновщика VC++ 6.0 можно сказать, чтобы он не использовал ни одной стандартной библиотеки и вручную указать список нужных библиотек.
По умолчанию же он подключает некий стандартный набор библиотек. Вопросы:
1) какие именно (если МFC не используется)
2) (самый главный вопрос) все библиотеки включаются в экзешку вне зависимости от того, используются ли они реально в программе или нет? Или такая проверка все-таки выполняется? (интересует с точки зрения оптимальности объема выходного кода)
Re: Как компоновщик подключает библиотеки? (VC++ 6.0)
От: Vi2 Удмуртия http://www.adem.ru
Дата: 24.07.02 08:52
Оценка:
Здравствуйте Fisher, Вы писали:

F>Только-только начал разбираться с С(С++). Поэтому не судите строго.

F>Такой вопрос: в опциях компоновщика VC++ 6.0 можно сказать, чтобы он не использовал ни одной стандартной библиотеки и вручную указать список нужных библиотек.

Есть свойтсво на вкладке Link в Settings... проекта — Ignore all default libraries и ниже текстовое поле Object/library modules для указания нужных библиотек.

F>По умолчанию же он подключает некий стандартный набор библиотек. Вопросы:

F>1) какие именно (если МFC не используется)

F>2) (самый главный вопрос) все библиотеки включаются в экзешку вне зависимости от того, используются ли они реально в программе или нет? Или такая проверка все-таки выполняется? (интересует с точки зрения оптимальности объема выходного кода)


Объектная библиотека состоит из объектных модулей. Конечно же, не все модули из библиотеки включаются в результирующий код (EXE или DLL). Только те, на которые ссылается собираемые модули проекта.
Схема примерно такая:
1) принудительно включаются некие модули (имеющие тип obj), без которох не может быть собрана программа, или же принудительно указываются ссылки, которые Линковщик должен определить (в итоге приводящие к загрузке опять же неких модулей). Одна из таких — точка входа в программу (entry point).
2) если в включённых модулях есть ссылки, которые ещё не известны, то осуществляется поиск таких ссылок в библиотеках проекта и включение объектных модулей, содержащих эти ссылки, из них. Опять повторяется п.2.

Поэтому не все модули включаются, это хорошо.
Однако, "с точки зрения оптимальности объема выходного кода", плохо спроектированный модуль библиотеки может иметь огромное количество функций, которые реально в коде могут не использоваться. Это будет балласт, но он всё же будет включён в результирующий код, потому как Линковщик включает("грузит") модуль целиком. Есть, конечно, нюансы в загрузке модулей, но пищущий на языке высокого уровня (ЯВУ), как правило, в этот процесс вмешаться не может.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[2]: Как компоновщик подключает библиотеки? (VC++ 6.0)
От: Fisher  
Дата: 24.07.02 09:14
Оценка:
Спасибо за ответ, Vi2. Вопрос снят. Мне уже дали исчерпывающую консультацию по особенностям компоновки, RTL и опциям компоновщика. Еще раз спасибо за развернутый ответ.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.