![]() |
Добро пожаловать, гость ( Вход | Регистрация )
![]() |
-=CHE@TER=- |
![]()
Сообщение
#1
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,371 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 318 раз(а) ![]() |
В общем, в последнее время часто приходится работать с программами на Си / C++.
В связи с этим хотелось бы нормальный компилятор. Сейчас пользуюсь DEV-CPP 4.9.8.0 и MSVC++ 6.0. Чем меня не устраивают оба этих компилятора - на примере adx2wave с моего сайта. DEV-CPP всем хорош, но использует msvcrt.dll, что меня несколько напрягает, размер .EXE - 14,336 байт. MSVC++ 6.0 - при включении опции оптимизации по размеру тоже начинает, гад, использовать msvcrt.dll, если её не включить - всё хорошо, использует только .DLL от ядра системы, но, увы, размером похвастаться не может - 40,960 байт. Поэтому хотелось бы спросить - существует ли нормальный компилятор (даже, скорее, линкер - т.к. скомпилировать, чтобы ошибок не было, могу и под другим компилятором), который: а) Не гадит в получаемый исходный файл лишней информацией (как MSVC). б) Не использует левые библиотеки, кроме .DLL ядра системы (как DEV-CPP). в) Генерирует небольшие по размеру исполняемые файлы. г) Ещё, было бы здорово, если бы он был Freeware'ный. Кто-нибудь знает - такое в природе существует? P.S. Блин, написал бы уже давно собственный компилятор для Delphi и C++, чем тем что есть пользоваться, но, увы, у меня нет такого дикого количества времени и сил... |
![]() ![]() |
-=CHE@TER=- |
![]()
Сообщение
#2
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,371 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 318 раз(а) ![]() |
Нашёл такую замечатульную вещицу: Tiny C Compiler
GCC плачет в обнимку с MS VC++ 6.0 глядя на итоговый размер. Но проблема та же - msvcrt.dll У программы есть ключик -static, который позволяет линковать программу статически. Например, при компиляции файла "test.c": QUOTE void main(void){} через TCC вот таким способом:QUOTE tcc.exe -static test.c получаем кучу ошибок:QUOTE tcc: undefined symbol '_controlfp' В справке написано, что можно линковать библиотеки. При попытке слинковать с msvcrt.lib от VC++ 6.0 получаю ошибку:tcc: undefined symbol '__set_app_type' tcc: undefined symbol '__getmainargs' tcc: undefined symbol 'exit' QUOTE >tcc.exe -static test.c -lMSVCRT.LIB Чтобы оно работало, нужно взять файл "MSVCRT.LIB", переименовать его в "libMSVCRT.a" и поместить в каталог "lib" - только тогда сработает (чтобы узнать это пришлось в исходниках рыться - libtcc.c:2083):tcc: cannot find -lMSVCRT.LIB QUOTE tcc.exe -static test.c -lMSVCRT Однако же, хоть оно и находит файлы библиотеки (кстати, ей ещё некоторые понадобятся - см. через FileMon, к каким она будет обращаться - libKERNEL32.a и ещё чего-то), но компилироваться статически отказывается - пишет всё те же ошибки. Кто-нибудь знает, как можно TCC подружить с либами от студии, чтобы итоговый .EXE файл ничего кроме kernel32.dll не использовал?.. |
![]() ![]() |
Упрощённая версия | Сейчас: 30th April 2025 - 19:43 |