Чтение онлайн

на главную - закладки

Жанры

Разработка приложений в среде Linux. Второе издание

Троан Эрик В.

Шрифт:

Большинство опций совпадают или подобны опциям других компиляторов,

gcc
включает в себя огромную документацию по своим опциям, доступную через info gcc (
man gcc
также выдает эту информацию, однако man-страницы не обновляются настолько часто, как документация в формате Texinfo).

– о имя_файла
Указывает имя выходного файла. Обычно в этом нет необходимости, если осуществляется компиляция в объектный файл, то есть по умолчанию происходит подстановка
имя_файла
на
имя_файла
. Однако если вы создаете исполняемый файл, по умолчанию (по историческим причинам) он создается под именем
а.out
. Это также полезно в случае, когда требуется поместить выходной файл в другой каталог.
– с
Компилирует
без компоновки исходный файл, указанный для командной строки. В результате для каждого исходного файла создается объектный файл. При использовании
make
компилятор
gcc
обычно вызывается для каждого объектного файла; таким образом, в случае возникновения ошибки легче обнаружить, какой файл не смог скомпилироваться. Однако если вы вручную набираете команды, часто в одном вызове
gcc
указывается множество файлов. В случае, если при задании множества файлов в командной строке может возникнуть неоднозначность, лучше указать только один файл. Например, вместо
gcc -с -о а.о а.с b.с
имеет смысл применить
gcc -с -o a.o b.c
.
– Dfoo
Определяет препроцессорные макросы в командной строке. Возможно, потребуется отменить символы, трактуемые оболочкой как специальные. Например, при определении строки следует избегать употребления ограничивающих строки символов
"
. Вот два наиболее употребляемых способа:
'-Dfoo="bar"'
и
– Dfoo=\"bar\"
. Первый способ работает намного лучше, если в строке присутствуют пробелы, поскольку оболочка рассматривает пробелы особым образом.
– Iкаталог
Добавляет каталог в список каталогов, в которых производится поиск включаемых файлов.
– Lкаталог
Добавляет каталог в список каталогов, в которых производится поиск библиотек,
gcc
будет отдавать предпочтение совместно используемым библиотекам, а не статическим, если только не задано обратное.
– lfoo
Выполняет компоновку с библиотекой
libfoo
. Если не указано обратное,
gcc
отдает предпочтение компоновке с совместно используемыми библиотеками (
libfoo.so
), а не статическими (
libfoo.a
). Компоновщик производит поиск функций во всех перечисленных библиотеках в том порядке, в котором они перечислены. Поиск завершается тогда, когда будут найдены все искомые функции.
– static
Выполняет компоновку с только статическими библиотеками. См. главу 8.
– g
,
– ggdb
Включает отладочную информацию. Опция
– g
заставляет
gcc
включить стандартную отладочную информацию. Опция
– ggdb
указывает на необходимость включения огромного количества информации, которую в силах понять лишь отладчик
gdb
.
Если дисковое пространство ограничено или вы хотите пожертвовать некоторой функциональностью ради скорости компоновки, следует использовать
– g
. В этом случае, возможно, придется воспользоваться другим отладчиком, а не
gdb
. Для максимально полной отладки необходимо указывать
– ggdb
. В этом случае
gcc
подготовит максимально подробную информацию для
gdb
. Следует отметить, что в отличие от большинства компиляторов,
gcc
помещает некоторую отладочную информацию в оптимизированный код. Однако трассировка в отладчике оптимизированного кода может быть сопряжена со сложностями, так как во время выполнения могут происходить прыжки и пропуски фрагментов кода, которые, как ожидалось, должны были выполняться. Тем не менее, при этом можно получить хорошее представление о том, как оптимизирующие компиляторы изменяют способ выполнения кода.
– O
,
– On
Заставляет gcc оптимизировать код. По умолчанию,
gcc
выполняет небольшой объем оптимизации; при указании числа (
n
) осуществляется оптимизация на определенном уровне. Наиболее распространенный уровень оптимизации — 2; в настоящее время в стандартной версии gcc самым высоким уровнем оптимизации является 3. Мы рекомендуем использовать
– O2
или
– O3
;
– O3
может увеличить размер приложения, так что если это имеет значение, попробуйте оба варианта. Если для вашего приложения важна
память и дисковое пространство, можно также использовать опцию
– Os
, которая делает размер кода минимальным за счет увеличения времени выполнения.
gcc
включает встроенные функции только тогда, когда применяется хотя бы минимальная оптимизация (
– O
).
– ansi
Поддержка в программах на языке С всех стандартов ANSI (X3.159-1989) или их эквивалента ISO (ISO/IEC 9899:1990) (обычное называемого С89 или реже С90). Следует отметить, что это не обеспечивает полное соответствие стандарту ANSI/ISO.
Опция
– ansi
отключает расширения
gcc
, которые обычно конфликтуют со стандартами ANSI/ISO. (Вследствие того, что эти расширения поддерживаются многими другими компиляторами С, на практике это не является проблемой.) Это также определяет макрос
__STRICT_ANSI__
(как описано далее в этой книге), который заголовочные файлы используют для поддержки среды, соответствующей ANSI/ISO.
– pedantic
Выводит все предупреждения и сообщения об ошибках, требуемые для ANSI/ISO-стандарта языка С. Это не обеспечивает полное соответствие стандарту ANSI/ISO.
– Wall
Включает генерацию всех предупреждений
gcc
, что обычно является полезным. Но таким образом не включаются опции, которые могут пригодиться в специфических случаях. Аналогичный уровень детализации будет установлен и для программы синтаксического контроля
lint
в отношении вашего исходного кода,
gcc
позволяет вручную включать и отключать каждое предупреждение компилятора. В руководстве по
gcc
подробно описаны все предупреждения.

5.2. Заголовочные файлы

Время от времени вы можете застать себя на том, что просматриваете заголовочные файлы Linux. Скорее всего, вы найдете рад конструкций, не совместимых со стандартом ANSI/ISO. Некоторые из них стоят того, чтобы в них разобраться. Все конструкции, рассматриваемые в этой книге, более подробно изложены в документации по

gcc
.

5.2.1. long long

Тип

long long
указывает на то, что блок памяти, по крайней мере, такой же большой, как
long
. На Intel i86 и других 32-разрядных платформах
long
занимает 32 бита, а
long long
— 64 бита. На 64-разрядных платформах указатели и
long long
занимают 64 бита, a
long
может занимать 32 или 64 бита в зависимости от платформы. Тип
long long
поддерживается в стандарте С99 (ISO/IEC 9899:1999) и является давним расширением С, которое обеспечивается
gcc
.

5.2.2. Встроенные функции

В некоторых частях заголовочных файлов Linux (в частности тех, что специфичны для конкретной системы) встроенные функции используются очень широко. Они так же быстры, как и макросы (нет затрат на вызовы функции), и обеспечивают все виды проверки, которые доступны при нормальном вызове функции. Код, вызывающий встроенные функции, должен компилироваться, по крайней мере, с включенной минимальной оптимизацией (

– O
).

5.2.3. Альтернативные расширенные ключевые слова

В

gcc
у каждого расширенного ключевого слова (ключевые слова, не описанные стандартом ANSI/ISO) есть две версии: само ключевое слово и ключевое слово, окруженное с двух сторон двумя символами подчеркивания. Когда компилятор применяется в стандартном режиме (обычно тогда, когда задействована опция
– ansi
), обычные расширенные ключевые слова не распознаются. Так, например, ключевое слово
attribute
в заголовочном файле должно быть записано как
__attribute__
.

5.2.4. Атрибуты

Расширенное ключевое слово

attribute
используется для передачи
gcc
большего объема информации о функции, переменной или объявленном типе, чем это позволяет код С, соответствующий стандарту ANSI/ISO. Например, атрибут
aligned
дает указание gcc о том, как именно выравнивать переменную или тип; атрибут
packed
указывает на то, что заполнение использоваться не будет;
noreturn
определяет то, что возврат из функции никогда не произойдет, что позволяет
gcc
лучше оптимизироваться и избегать фиктивных предупреждений.

Атрибуты функции объявляются путем их добавления в объявление функции, например:

void die_die_die(int, char*) __attribute__ ((__noreturn__));

Объявление атрибута размещается между скобками и точкой с запятой и содержит ключевое слово

attribute
, за которым следуют атрибуты в двойных круглых скобках. Если атрибутов много, следует использовать список, разделенный запятыми.

int printm(char*, ...)

__attribute__((const,

Поделиться:
Популярные книги

Печать Пожирателя

Соломенный Илья
1. Пожиратель
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Печать Пожирателя

Привет из Загса. Милый, ты не потерял кольцо?

Лисавчук Елена
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Привет из Загса. Милый, ты не потерял кольцо?

Мастер 2

Чащин Валерий
2. Мастер
Фантастика:
фэнтези
городское фэнтези
попаданцы
технофэнтези
4.50
рейтинг книги
Мастер 2

Нечто чудесное

Макнот Джудит
2. Романтическая серия
Любовные романы:
исторические любовные романы
9.43
рейтинг книги
Нечто чудесное

Клан

Русич Антон
2. Долгий путь домой
Фантастика:
боевая фантастика
космическая фантастика
5.60
рейтинг книги
Клан

Имя нам Легион. Том 3

Дорничев Дмитрий
3. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 3

Запасная дочь

Зика Натаэль
Фантастика:
фэнтези
6.40
рейтинг книги
Запасная дочь

Убивать чтобы жить 7

Бор Жорж
7. УЧЖ
Фантастика:
героическая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 7

У врага за пазухой

Коваленко Марья Сергеевна
5. Оголенные чувства
Любовные романы:
остросюжетные любовные романы
эро литература
5.00
рейтинг книги
У врага за пазухой

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Генерал Скала и ученица

Суббота Светлана
2. Генерал Скала и Лидия
Любовные романы:
любовно-фантастические романы
6.30
рейтинг книги
Генерал Скала и ученица

Оцифрованный. Том 1

Дорничев Дмитрий
1. Линкор Михаил
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Оцифрованный. Том 1

Его маленькая большая женщина

Резник Юлия
Любовные романы:
современные любовные романы
эро литература
8.78
рейтинг книги
Его маленькая большая женщина

Хуррит

Рави Ивар
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Хуррит