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=-
Apr 26 2015, 12:01
Сообщение #2


Walter Sullivan
***

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



Представьте себе такую программу:

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 нет ни слова об этом ключе, а единственный человек, который о нём знает, узнал о его существовании исправляя баг в компиляторе.
Словами не передать как я фрустрирую!


Спасибо сказали:
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

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


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

 



Упрощённая версия Сейчас: 21st June 2024 - 09:04