Возможно вы искали: 'BorderZone'

May 15 2025 18:29:52
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 96111483
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18357
• Обзор The Walking ... 18801
• Обзор DMC: Devil M... 19879
• Обзор на игру Valk... 15877
• Обзор на игру Stars! 17764
• Обзор на Far Cry 3 17948
• Обзор на Resident ... 16024
• Обзор на Chivalry:... 17508
• Обзор на игру Kerb... 17981
• Обзор игры 007: Fr... 16619
Превью о играх
• Превью к игре Comp... 17960
• Превью о игре Mage... 14464
• Превью Incredible ... 14721
• Превью Firefall 13479
• Превью Dead Space 3 16334
• Превью о игре SimC... 14730
• Превью к игре Fuse 15442
• Превью Red Orche... 15542
• Превью Gothic 3 16343
• Превью Black & W... 17354
Главная » Статьи » Разное » Как на самом деле работает gcc (gcc compile)

Как на самом деле работает gcc (gcc compile)

Ключевые слова: gcc, compile, (найти похожие документы)

From: Sergei Karasiov <karasiov.at.yahoo.dot.com>
Newsgroups: email
Date: Mon, 15 Nov 2003 14:31:37 +0000 (UTC)
Subject: Как на самом деле работает gcc

Как на самом деле работает gcc

оригинал: http://www.cae.wisc.edu/~gerdts/how_gcc_works.html

Предисловие

Данный материал не является дословным переводом оригинальной статьи. Дело
в том, что у переводчика не оказалось под рукой ОС HP-UX для проверки
утверждений автора исходного материала. Так что для завершения работы
была использована ОС FreeBSD и весь машинный вывод соответсвует именно ей.
Первое лицо было изменено на безликое третье.Текст претерпел.
В остальном изменений не последовало.

Основной текст

В этом документе будет использована следующая простая программа. Она назывется
"myprogram.c". Отладочный вывод gcc и других программ бывает довольно длинным.
Для повышения удобочитаемости были вставлены переводы строк предваренные
символом ''.


#include <math.h>
#include <stdio.h>

#define PI 3.1415926543

int main() {
printf("sin(pi) = %fn", sin(PI));
printf("sin(pi/2) = %fn", sin(PI/2));
exit(0);
}
Для того чтобы скомпилировать программу необходимо слинковать ее с библиотекой
математических функций libm. Это делается с помощью флага -l.

%gcc -o myprogram myprogram.c -lm

Сам по себе gcc не делает много работы, за исключением вызова различных утилит. Этот
процесс можно наблюдать если дать gcc ключ -v.

%gcc -save-temps -v -o myprogram myprogram.c -lm

Отладочный вывод можно увидеть ниже.

Using builtin specs.
gcc version 2.95.3 20010315 (release) [FreeBSD]

Предыдущие две строки не интересуют нас в данный момент.

Первая программа которую вызывает gcc -- это cpp, препроцессор языка С. Он обрабатывает
строки содержащие #define, #ifdef, #include и тд. и приводит их к необходимому компилятору
виду.
/usr/libexec/cpp0 -lang-c -v -D__GNUC__=2 -D__GNUC_MINOR__=95 -Di386 -D__FreeBSD__=4
-D__FreeBSD_cc_version=440000 -Dunix -D__i386__ -D__FreeBSD__=4 -D__FreeBSD_cc_version=440000
-D__unix__ -D__i386 -D__unix -Acpu(i386) -Amachine(i386) -Asystem(unix)
-Asystem(FreeBSD) -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__
-D__ELF__ myprogram.c myprogram.i

Эти строки -- отладочный вывод проепроцессора С, который получил ключ -v,
который в свою очередь ранее был передан программе gcc. Первая строка содержащяя
#include говорит о том, что производится поиск файлов соответсвующих строкам вида
#include "something.h", такой поиск производится только в текущей директории.
Строка следующая за ней, говорит что производится поиск файлов соответвующих
строкам вида #include <something.h>, и производится он в директориях указанных
ниже.

GNU CPP version 2.95.3 20010315 (release) [FreeBSD] (i386 FreeBSD/ELF)
#include "..." search starts here:
#include <...> search starts here:
/usr/include
/usr/include
End of search list.
The following default directories have been omitted from the search path:
/usr/include/g++
End of omitted list.


Примечание переводчика

Три заключительных строки предыдущего фрагмента отсутсвуют в отладочном
выводе оригинальной статьи. Предполагается различие версий.

На этом месте все строки начинающиеся с #ifdef, #if, #include, #define и тд.
уходят. Добавляется содержимое всех #include-файлов. Все макросы (#define) расширяются.
Строки стоящие между директивами #if (или #ifdef, или #ifndef) и #endif (или #else)
будут удалены если утверждения в них оказались ложными. Для того чтобы увидеть вывод
препроцессора просмоьрите файл myprogram.i, который сохранился благодаря
ранее переданному ключу -save-temps.

Теперь за дело принимается собственно компилятор, который и превращает
препроцессированый код в программу на ассемблере (как видим gcc это оболочка).

/usr/libexec/cc1 myprogram.i -quiet -dumpbase myprogram.c -version -o myprogram.s
GNU C version 2.95.3 20010315 (release) [FreeBSD] (i386-unknown-freebsd) compiled
by GNU C version 2.95.3 20010315 (release) [FreeBSD].

В данном месте будет создан файл myprogramm.s. Вы можете просмотреть его если любите
читать ассемблерные листинги.

/usr/libexec/elf/as -v -o myprogram.o myprogram.s
GNU assembler version 2.11.2 20010719 [FreeBSD] (i386-unknown-freebsd4) using
BFD version 2.11.2 20010719 [FreeBSD]

Далее для создания файла с машинными кодами вызывается ассемблер. Машинный код
помещается в обьектный файл (.o).

Теперь все готово к линковке. На этой стадии берутся различные обьектные (.о) и архивные (.а)
(они так же называются статические библиотеки) файлы, разделяемые библиотеки (.sl или .so,
в зависимости от системы) и их содержимое вставляется в исполняемый файл.

/usr/libexec/elf/ld -m elf_i386 -dynamic-linker
/usr/libexec/ld-elf.so.1 -o myprogram
/usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtbegin.o
-L/usr/libexec/elf
-L/usr/libexec
-L/usr/lib myprogram.o
-lm -lgcc -lc -lgcc /usr/lib/crtend.o /usr/lib/crtn.o

Каждый флаг -L указывает на директорию, в которой следует искать необходимые
библиотеки. Сами библиотеки указываются с помощью ключа -l. Следует обратить
внимание что последняя команда содержит в себе ключи "-lm, -lgcc, -lc". Этот
шаг заверштся успешно только если все символы во всех обьектных (.о) файлах
будут найдены или в обьектных файлах или в библиотеках libm.a,
libgcc.a и libc.a.

Для того чтобы увидеть какие символы нужны файлу myprogram.o вы можете
запустить утилиту nm.

%nm myprogram.o

U exit
00000000 t gcc2_compiled.
00000000 T main
U printf
U sin

Символы содержащие перед собой символ 'U' (undef) следует искать в других
файлах. Если есть неоходимость самостоятельно найти какой либо символ, то
можно вновь использовать программу nm.

Послесловие переводчика

Вывод программы nm на компьютере переводящего не имел ничего общего с тем
что приведено в статье переводимого.

Конец
500 Прочтений •  [Как на самом деле работает gcc (gcc compile)] [08.05.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• Как на самом деле работает gcc (gcc... Ukraine Vova 08.05.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2025

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка