2014-10-27 3 views
1

Если .lib-файлы предназначены для статических ссылок и DLL-файлов для динамической компоновки, почему я могу указать в C/C++ -> генерация кода -> параметры библиотеки времени выполнения, выберите многопоточную или многопоточную DLL при построении явно статичного библиотеки (т. е. при создании .lib) или при создании проекта и привязке к библиотеке .lib?visual studio 2013 options

+1

Этот параметр предназначен для среды выполнения, которая не зависит от цели, которую вы производите. Я имею в виду, что вы можете создать статический .lib с динамическим CRT или DLL со статическим CRT и несколькими другими комбинациями. – drescherjm

+0

Что такое CRT и когда я хочу сделать его статическим или динамическим? Я хочу статически связывать мои библиотеки, это гарантировано, если это файл .lib в любом случае? Настройка времени выполнения должна соответствовать всем библиотекам? – user3353819

ответ

2

В Visual Studio вы можете указать, как CRT будет интегрирован в ваш проект под C/C++->Code Generation->Runtime Library. Этот параметр проекта контролирует, как подпрограммы C/C++, используемые явно или внутренне (например, функции исключения или процедуры STL), будут связаны с вашим проектом.

Вы можете создать статическую библиотеку, которая использует CRT динамически или статически, указав флаг /MT или /MD во время компиляции.

Что касается преимуществ/недостатков, я связываю this answer, который содержит довольно хороший список точек, которые следует иметь в виду.

Последнее, что нужно заметить: если ваш проект будет использовать несколько статических библиотек (включая ваш .lib-файл), вы должны убедиться, что эта опция CRT соответствует во время фазы связывания, иначе вы можете столкнуться с the (in)famous LNK4098 error.