Windows GNU compiler suite без внешних зависимостей - PullRequest
8 голосов
/ 05 сентября 2011

Существуют ли бесплатные Windows-совместимые пакеты для Windows, которые генерируют автономные исполняемые файлы без внешних зависимостей?

Вот некоторые из них, которые не соответствуют требованиям, упорядоченные по нежелательности, по крайней мере для большинства:

  • MinGW (MSVCRT.DLL)
  • Cygwin (библиотеки времени выполнения Cygwin)
  • DJGPP (NTVDM.EXE; отсутствует на платформах x64)

Прямо сейчас я склоняюсь (и использую, хотя и неуверенно) MinGW, поскольку это, кажется, самый «чистый» подход. Я до сих пор не в восторге от зависимости MSVCRT.DLL, особенно потому, что могу и должен иметь дело с клиентами, работающими под пред-Win2K. (Windows 2000 был первым выпуском, поставляемым с MSVCRT.DLL) Распространение MSVCRT с приложением не вариант.

P.S .: Мне известно, что есть попытка создать замену MSVCRT для MinGW, но она все еще нестабильна / бета и имеет ограниченную функциональность; я бы не чувствовал себя комфортно в производственных приложениях.

P.P.S .: Ответы на эффект «MSCVRT обычно всегда есть» или «Просто упакуйте повторный список» не являются конструктивными ответами. В частности, задается вопрос, КАК ИЗБЕЖАТЬ зависимостей, а не обеспечивать их наличие.

1 Ответ

11 голосов
/ 05 сентября 2011

Чтобы избежать MSVCRT с MinGW, используйте следующие флаги для компоновщика:

-nostdlib -Wl,--exclude-libs,msvcrt.a -Wl,-eWinMain

Обратите внимание, что вы должны объявить функцию с именем WinMain (вы также можете выбрать другое имя для нее), которая будет вашим main. Вы также не можете использовать какие-либо стандартные функции, такие как strlen, printf и друзья. Вместо этого вы должны использовать эквиваленты WinAPI, такие как lstrcmp, wsprintf и т. Д.

Пример этого можно увидеть с помощью SCons по адресу:

https://sourceforge.net/p/nsis/code/6160/tree/NSIS/trunk/SCons/Config/gnu

Я использовал это для своего проекта, который также требует совместимости с Windows 9x. Это также имеет приятный побочный эффект от наличия меньших исполняемых файлов. Судя по вашим комментариям выше, кажется, вы тоже это ищете. Если это так, в файле, на который я ссылаюсь выше, вы можете использовать еще больше трюков.

У Microsoft есть таблица, соответствующая функциям CRT и WinAPI, в следующем KB99456:

Эквиваленты Win32 для функций времени выполнения C ( Веб-архив )

Дополнительная информация о том, как избавиться от ЭЛТ (хотя для VC это может помочь):

http://www.catch22.net/tuts/win32/reducing-executable-size

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...