Сборка статической библиотеки без C / C ++ среды выполнения в Visual Studio - PullRequest
0 голосов
/ 17 сентября 2018

Есть ли способ создать статическую библиотеку без указания версии среды выполнения C / C ++?

Я использую Visual Studio 2017 для создания статической библиотеки, и мне нужно указать версию "Runtime Library" на странице параметров "Генерация кода" (\ MD или \ MT).Если я выберу одну версию, а приложение, использующее мою библиотеку, выберет другую, Visual Studio выдаст ошибку: mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MT_StaticRelease'.

Я знаю, что при создании EXE я могу использовать переключатель компоновщика \ NODEFAULTLIB, чтобы невключаю среду выполнения C / C ++, но здесь я создаю статическую библиотеку, в которой даже нет страницы параметров Linker в окне свойств.

Кажется, что Простой слой DirectMedia нашел способ сделать это.

Обновление: позже я понял, что действительно могу включить переключатель \ NODEFAULTLIB на странице параметров библиотекаря в окне свойств статической библиотеки.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Если вы создаете статическую библиотеку, это относится к вашей собственной библиотеке, а не к приложению в целом. Если вы хотите распространять приложение, это просто означает, что вам не нужно распространять отдельную DLL. Поэтому не устанавливайте NODEFAULTLIB.

Если вы запустите приложение на компьютере, на котором не установлена ​​Visual Studio 2017, вы можете получить сообщение об ошибке. Отсутствующие библиотеки DLL - это системные библиотеки, которые необходимы для запуска приложений, скомпилированных с VS2017. Вы можете получить отсутствующие библиотеки из: https://support.microsoft.com/en-gb/help/2977003/the-latest-supported-visual-c-downloads (эта ссылка не гарантируется в будущем). Вторично распространяемые библиотеки могут распространяться свободно. Они называются vc_redist.x86.exe и vc_redist.x64.exe. Выберите vc_redist.x86.exe, если вы скомпилировали свой код для 32-битной версии. Это не относится к машине, на которой запущено приложение.

0 голосов
/ 18 сентября 2018

Вы делаете это, НЕ используя какие-либо библиотеки времени выполнения.Если вы не используете ни одну из библиотек времени выполнения, то опция «Генерация кода» не имеет смысла, так как заглушки времени выполнения не помещаются в файл obj.

SDL в основном говорит об этом на своем веб-сайте:

В Windows SDL вообще не зависит от времени выполнения C, даже для malloc ().

Как только вы используете любую систему, поставляемую Microsoft VS, выиспользуя там библиотеку времени выполнения.

Так что, если вы используете только Windows SDK и API, предоставляемый Win32 API, то вам не нужна среда выполнения VC.

...