IPB

Добро пожаловать, гость ( Вход | Регистрация )

> Нужен нормальный C/C++ компилятор
-=CHE@TER=-
Aug 6 2008, 11:07
Сообщение #1


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,355
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 311 раз(а)



В общем, в последнее время часто приходится работать с программами на Си / 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++, чем тем что есть пользоваться, но, увы, у меня нет такого дикого количества времени и сил...
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
 
Reply to this topicStart new topic
Ответов
-=CHE@TER=-
Jun 22 2012, 20:48
Сообщение #2


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,355
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 311 раз(а)



Нашёл такую замечатульную вещицу: 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'
tcc: undefined symbol '__set_app_type'
tcc: undefined symbol '__getmainargs'
tcc: undefined symbol 'exit'
В справке написано, что можно линковать библиотеки. При попытке слинковать с msvcrt.lib от VC++ 6.0 получаю ошибку:
QUOTE
>tcc.exe -static test.c -lMSVCRT.LIB
tcc: cannot find -lMSVCRT.LIB
Чтобы оно работало, нужно взять файл "MSVCRT.LIB", переименовать его в "libMSVCRT.a" и поместить в каталог "lib" - только тогда сработает (чтобы узнать это пришлось в исходниках рыться - libtcc.c:2083):
QUOTE
tcc.exe -static test.c -lMSVCRT
Однако же, хоть оно и находит файлы библиотеки (кстати, ей ещё некоторые понадобятся - см. через FileMon, к каким она будет обращаться - libKERNEL32.a и ещё чего-то), но компилироваться статически отказывается - пишет всё те же ошибки. Кто-нибудь знает, как можно TCC подружить с либами от студии, чтобы итоговый .EXE файл ничего кроме kernel32.dll не использовал?..
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Сообщения в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0 -

 



Упрощённая версия Сейчас: 13th May 2024 - 09:52