C++. Сборник рецептов
Шрифт:
При сборке из командной строки используйте опции компилятора и компоновщика, представленные в таблицах с 1.30 до 1.36. Опции командной строки и имена библиотек для отладочной и окончательной конфигураций обычно очень похожи. В следующих таблицах буквы в квадратных скобках добавляются только для отладочных конфигураций. Имена динамических вариантов библиотек времени выполнения показаны в круглых скобках. При выборе динамической компоновки эти библиотеки должны быть доступны при выполнении программы.
Табл. 1.30. Опции компилятора для выбора библиотеки времени выполнения при использовании Visual C++ или Intel (Windows)
Статическая компоновка | Динамическая компоновка | |
---|---|---|
Однопоточная | – ML[d]¹ | Неприменимо |
Многопоточная | – MT[d] | – MD[d](msvcrt[d].dll, msvcr80[d].dll)² |
¹
² Предыдущие версии Visual C++ использовали DLL msvcr71.dll, msvcr71d.dll, msvcr70.dll, msvcr70d.dll и т.д.
Табл. 1.31. Опции компилятора для выбора библиотеки времени выполнения при использовании Metrowerks (Windows)
Статическая компоновка | Динамическая компоновка | |
---|---|---|
Однопоточная | – runtime ss[d] | Неприменимо |
Многопоточная | – runtime sm[d] | – runtime dm[d](MSL_All-DLL90_x86[_D].dll) |
Табл. 1.32. Опции командной строки для выбора библиотеки времени выполнения при использовании CodeWarrior 10 для Max OS X
Статическая компоновка | Динамическая компоновка |
---|---|
Опции не требуется | Обратитесь к документации Metrowerks по опциям командной строки (MSL_All_Mach-O[_D].dylib) |
Табл. 1.33. Опции компилятора для выбора библиотеки времени выполнения при использовании Borland
Статическая компоновка | Динамическая компоновка | |
---|---|---|
Однопоточная | – WM | – WM- -WR -WC¹ (cc3260.dll) |
Многопоточная | – WM | – WM -WR -WC (cc3260mt.dll) |
¹ Опция – WC требуется только при сборке консольного приложения.
Табл. 1.34. Опции компилятора для выбора библиотеки времени выполнения при использовании Digital Mars (все библиотеки времени выполнения многопоточны)
Статическая компоновка | Динамическая компоновка |
---|---|
Опций не требуется | – ND -D_STLP_USE_DYNAMIC_LIB(sccrt70.dll, stlp45dm.dll) |
Табл. 1.35. Опции компилятора для выбора библиотеки времени выполнения при использовании GCC
Статическая компоновка | Динамическая компоновка |
---|---|
– static¹ | Опций
|
¹ Эта опция отключает всю динамическую компоновку, а не только динамические библиотеки времени выполнения.
Например, чтобы указать динамическую окончательную сборку библиотеки времени выполнения Visual С++, используйте опцию компилятора – MD. Чтобы указать статическую однопоточную отладочную сборку библиотеки времени выполнения Metrowerks для Windows, используйте опцию компилятора – runtime ssd. Чтобы указать однопоточную динамическую сборку библиотеки времени выполнения Borland, передайте компилятору и компоновщику опции – WM- -WR -WC.
Инструкции для указания варианта библиотеки времени выполнения в IDE приведены в табл. 1.36.
Табл. 1.36. Указание варианта библиотеки времени выполнения из IDE
IDE | Конфигурация |
---|---|
Visual C++ | На страницах свойств проекта перейдите к Configuration Properties→C/C++→Code Generation (Генерация кода) и используйте раскрывающийся список Runtime Library (библиотека времени выполнения) |
CodeWarrior | Для проектов динамических библиотек добавьте в проект объектный файл /usr/lib/dylib1.o и библиотеки MSL_Shared_AppAndDylib_Runtime[_D].lib и MSL_All_Mach-O[_D].dylib и удалите все библиотеки вида MSL_<XXX>_Mach-O[_D].lib. Для проектов исполняемых файлов добавьте в проект объектный файл /usr/lib/crtl.с и библиотеки MSL_Shared_AppAndDylib_Runtime[_D].lib и MSL_All_Mach-O[_D].dylib и удалите все библиотеки вида MSL_<XXX>_Mach-O[_D].lib |
C++Builder | Будет ли проект одно- или многопоточным, должно быть указано при его создании. Чтобы выбрать статическую или динамическую библиотеку времени выполнения, в окне Project Options перейдите к Linker и установите или снимите флажок Use dynamic RTL (Использовать динамические библиотеки времени выполнения) |
Dev-C++ | Чтобы выбрать статическую библиотеку времени выполнения, укажите опцию командной строки – static, как описано в рецепте 1.20 |
Библиотека времени выполнения содержит реализации вспомогательных функций, необходимых при выполнении программы. Обычно библиотека времени выполнения содержит реализации функций стандартной библиотеки С, функций, используемых для доступа к сервисам операционной системы, таким как потоки и файловые системы, и специфичных для платформы, и функций, предоставляющих инфраструктуру для функций языка С++, таких как информация о типах во время выполнения (RTTI) и обработка исключений.
В большинстве случаев, чем больше у вас выбор, тем лучше. Однако слишком большое количество библиотек времени выполнения приводит к различным проблемам. Главной проблемой является гарантия того, что все компоненты приложения — статические библиотеки, динамические библиотеки и исполняемые файлы — используют один и тот же вариант библиотеки времени выполнения, Если это не так, то приложение может не скомпоноваться или в нем могут появиться сложные с точки зрения диагностики сбои.