| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Поиск кросплатформенного компилятора C++ |
| Автор: Xerx 14.8.2007, 17:32 | ||
| Кто знает компилятор, генерирующий Win32EXE, не требующий для работы сторонних библиотек (как например msvcrt.dll)? Я пока нашел лишь Digital Mars. Он компилирует
в exe'шник, требующий лишь user32.dll и kernel32.dll. Т.е. то, что мне и нужно. Но, размер файла более 30Кб. Не смертельно, но меньше у меня не получилось сделать. Есть ли компиляторы лучше? P.S. Критично, чтобы НЕ использовались сторонние библиотеки. Итоговый размер уже менее важен. |
| Автор: Fazil6 14.8.2007, 18:31 |
такая "кроссплатформенность" достигается настройками компиллятора и вобщем-то любой компиллятор может так (без msvcrt.dll ) |
| Автор: jonie 14.8.2007, 21:48 |
| читать там http://forum.vingrad.ru/forum/topic-167210.html +поиск. |
| Автор: Xerx 15.8.2007, 13:13 | ||
| Если бы все было так легко. Я пытаюсь это сделать на следующих вариантах: MSVS 2005 с таким кодом:
Включил опцию /nodefaultlib, теперь компилятор ругается Error 1 error LNK2001: unresolved external symbol @__security_check_cookie@4 TestProject.obj Если опцию не включать, но выключить генерацию отладочного кода, в итоговом файле используется только User32.dl. Но размер 60Кб! Меньше никак нельзя? В MinGW аналогично, только #include <windows.h>. Как я ни бился - используется msvcrt.dll. Зато размер - 5Кб, что очень даже хорошо. Аналогично в Code::Blocks (тот же компилятор) BCB, к сожалению, под рукой нет. Digital Mars генерирует файл без доп. библиотек, но создается консольное приложение на 30Кб. Избавиться от этого я не смог. Emacs это вообще тихий ужас ;-) Кто может привести точное описание (желательно по шагам) для конкретной среди и конкретного компилятора отключения использования доп. библиотек, чтобы после этого можно было корректно скомпилировать приведенный выше код? Буду благодарен. |
| Автор: SABROG 15.8.2007, 13:48 | ||
| Откажись от RTL(CRT). В случае с mingw32 остается mingwm10.dll, можно попробывать эти флаги: -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc http://www.rsdn.ru/article/cpp/crt.xml Попробуй этот код скомпилить через mingw32:
Я так понял придется еще отказаться от нитей и эксепшенов. |
| Автор: Xerx 15.8.2007, 14:31 | ||||
| Мне НЕ нужна поддержка CRT/RTL, RTTI, MFC, ООП и так далее. Ну и никаких встроенных memcpy, strlen и new/delete мне НЕ нужно. Только минимальный размер итоговой программы, использующей только Win32API вызовы. Но надо compiler+IDE+debugger. Смог скомпилировать этот код:
с помощью MSVS2005. Получил EXE'шник размером в 2Кб. Причем используются только User32.MessageBoxA и Kernel32.ExitProcess. Причем никаких выравнивания я не использовал. Собственно, что и хотелось. А как насчет других сред? Слишком мне эта MSVS непривычная (я ее впервые в жизни запустил): перегруженная, тормознутая и т.д и т.п.... ;-) В примере
Мне не нравится использование iosteam - это мне излишне. Ну и соответственно нужно выкинуть cout. Нужно ТОЛЬКО Win32API. |
| Автор: SABROG 15.8.2007, 16:28 |
| Может легче тогда будет на ассемблер сесть ? Fasm хорошая алтернатива, полностью управляемый код, ничего лишнего вообще, кроссплатформенный. Насчет MSVCRT статейка есть, смысл сходится к тому, чтобы заменить msvcrt на другую библиотеку - http://msdn.microsoft.com/msdnmag/issues/01/01/hood/default.aspx |
| Автор: Xerx 15.8.2007, 16:31 |
| SABROG Я предпочитаю MASM. Уже много лет под ним сижу. Но мне сейчас нужен компилятор ИМЕННО C++. |