Вывод статической библиотеки или динамической библиотеки не зависит от компилятора. Это работа линкера. Компилятор генерирует файлы .obj, которые связаны компоновщиком (когда выполняются условия, например, вам нужна точка входа для .exe), что вы хотите.
В частности, компоновщик MS link.exe
имеет несколько выходных флагов:
no flag: .exe is produced;
/LIB: static library .lib produced;
/DLL: dynamic library .dll and import library .lib produced;
В случае /DLL
вы также хотите украсить экспортируемые функции / классы с помощью __declspec(dllexport)
, поэтому компоновщик поместит их в библиотеку импорта. Также обратите внимание, что статическая библиотека и библиотека импорта НЕ эквивалентны, даже если они оба имеют расширение .lib. Есть также дополнительные файлы, которые могут быть созданы с помощью компоновщика: здесь ссылка на статью MSDN о параметрах link.exe .
РЕДАКТИРОВАТЬ: Как отметил Бен, link.exe /LIB
действительно вызывает lib.exe
для статической библиотеки. Запуск link /LIB
выходов (Windows SDK 7.1 SP1):
D:\Programs\Windows SDK 7.1>link /lib
Microsoft (R) Library Manager Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.
usage: LIB [options] [files]
options:
/DEF[:filename]
/ERRORREPORT:{NONE|PROMPT|QUEUE|SEND}
/EXPORT:symbol
/EXTRACT:membername
/INCLUDE:symbol
/LIBPATH:dir
/LIST[:filename]
/LTCG
/MACHINE:{ARM|EBC|IA64|MIPS|MIPS16|MIPSFPU|MIPSFPU16|
SH4|THUMB|X64|X86}
/NAME:filename
/NODEFAULTLIB[:library]
/NOLOGO
/OUT:filename
/REMOVE:membername
/SUBSYSTEM:{BOOT_APPLICATION|CONSOLE|EFI_APPLICATION|
EFI_BOOT_SERVICE_DRIVER|EFI_ROM|EFI_RUNTIME_DRIVER|
NATIVE|POSIX|WINDOWS|WINDOWSCE}[,#[.##]]
/VERBOSE
/WX[:NO]