![]() |
Добро пожаловать, гость ( Вход | Регистрация )
![]() |
-=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 раз(а) ![]() |
Представьте себе такую программу:
CODE #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> static char strx[] = TEXT("HELLO WORLD!"); /* 3984 => 0x0F90 */ void func(void) { char buf[3984]; strcpy(buf, strx); printf("%s\n", buf); } int main(int argc, char *argv[]) { func(); return(0); } Всё компилируется и работает на отлично. А теперь если поставить вместо 3984 число 3985 или больше, то получим что-то очень странное: QUOTE C:\Temp/ccsfeaaa.o(.text+0x352):test.c: undefined reference to `_alloca' После долгих гуглений и битья головой об стол нашёл вот такое обсуждение: QUOTE Danny Smith To disable stack probing, add this switch -mno-stack-arg-probe. Randall R Schulz Man! I scanned through the GCC man page for anything that would control this action, and couldn't find anything. I don't see "-mno-stack-arg-probe" listed there at all, nor is any option that includes the word "probe." Danny Smith Yeah, no documentation to speak of. The only reason I know about it because I've been chasing the _alloca bug that Fish reported. It is still present in GCC trunk (3.4). I have submitted a simple patch that fixes, but ... time for a ping in the New Year. Вдумайтесь в это - в документации к GCC нет ни слова об этом ключе, а единственный человек, который о нём знает, узнал о его существовании исправляя баг в компиляторе. Словами не передать как я фрустрирую! Спасибо сказали:
|
![]() ![]() |
Упрощённая версия | Сейчас: 30th April 2025 - 19:49 |