Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорная техника Сторожок / MPLAB_C30_Руководство пользователя.pdf
Скачиваний:
161
Добавлен:
20.02.2016
Размер:
1.26 Mб
Скачать

Глава 3. Использование компилятора в командной строке

3.5.9. Опции для компоновщика

Если хотя бы одна из опций -c, -S или -E используется, компоновщик не запускается и имена объектных файлов не будут использоваться в качестве аргументов.

ТАБЛИЦА 3-13. ОПЦИИ ДЛЯ КОМПОНОВЩИКА

Опция

Описание

 

 

-Ldir

Добавить каталог dir к списку каталогов, в которых будет

 

производиться поиск библиотек, определенных опцией -l.

 

 

-llibrary

При компоновке искать библиотеку library.

 

Компоновщик ищет библиотеку, файл которой имеет в

 

A

library.a в стандартном списке

 

действительности имя lib.

 

каталогов библиотек. После этого он использует этот файл

 

так, как если бы он был точно задан своим именем.

 

Wilson

 

 

Есть разница, в каком месте командной строки указана

 

опция; Компоновщик обрабатывает библиотеки и объектные

 

файлы в той последовательности, в которой они заданы. Т.е.

 

foo. -lz bar.o даст поиск библиотеки z после файла

 

foo.o, но перед файлом bar.o. Если файл bar.o ссылается

 

на функции из libz.a, то эти функции могут не загрузиться.

 

Каталоги для поиска включают некоторое количество

 

стандартных системных директорий, плюс те, что были

 

определены опциями -L.

 

 

Обычно файлы, найденные таким способом, являются

 

библиотечными (файлами архивов, состоящих из объектных

 

by

 

 

файлов). Компоновщик обрабатывает архивы путем поиска в

 

них объектных файлов, в которых определены символы, на

 

которые уже были ссылки, но не было определений. Но если

 

обрабатываемый файл является просто объектным файлом,

Translated

то он компонуется обычным способом. Единственной

разрешаются точками входа в стандартных библиотеках

 

разницей между использованием опции -l (т.е. -lmylib) и

 

простым заданием имени файла библиотеки (т.е.

 

libmylib.a) является то, что -l ищет библиотеку в ряде

 

каталогов, как определено. По умолчанию компоновщик

 

будет искать библиотеки, заданные опцией -l в каталоге:

 

<install-path>\lib

 

 

При установке компилятора в каталог, принятый по

 

умолчанию, это будет:

 

 

c:\Program Files\Microchip\MPLAB C30\lib

 

Такое поведение может быть изменено с использованием

 

переменных окружения, описанных в п. 3.6. «Переменные

 

окружения».

 

 

 

-nodef ultlibs

Не использовать стандартные системные библиотеки при

 

компоновке. Компоновщику будут переданы только

 

библиотеки, которые вы зададите. Компилятор может

 

создавать вызовы memcmp, memset и memcpy. Обычно они

 

компилятора. При использовании данной опции описанные

 

точки входа должны поддерживаться каким-то другим

 

способом.

 

 

 

-s

Удалить все таблицы символов и информацию о

 

перемещении из исполняемого кода.

 

 

 

© 2008 Microchip Technology Inc.

DS51284H(ru) стр. 3-23

16-битовый компилятор Си. Руководство

ТАБЛИЦА 3-13. (ПРОД-Е) ОПЦИИ ДЛЯ КОМПОНОВЩИКА

Опция

 

Описание

 

 

-u symbol

Сделать вид, что symbol не определен, чтобы заставить

 

прикомпоновать библиотечные модули с его определением.

 

Допустимо многократное использование опции -u с разными

 

символами, для загрузки дополнительных библиотечных

 

модулей.

 

 

 

-Wl, option

Передать опцию option компоновщику. Если option

 

содержит запятые, она разбивается этими запятыми на

 

несколько опций.

 

 

 

 

-Xlinker option

 

.

Передать опцию option компоновщику. Может

 

 

A

 

использоваться для поддержки специфических системных

 

опций компоновщика, которые компилятор не распознает.

 

Wilson

 

3.5.10. Опции для поиска в каталогах

 

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

ТАБЛИЦА 3-14. ОПЦИИ ДЛЯ ПОИСКА В КАТАЛОГАХ

Опция

Описание

 

 

-Bprefix

Эта опция определяет, где искать исполняемые,

 

библиотечные, включаемые файлы и файлы данных самого

 

компилятора. Драйвер компилятора запускает одну или

 

более программ pic30-cpp, pic30-cc1, pic30-as и

 

pic30-ld. Он пробует prefix в качестве префикса для

 

каждой программы, которую пытается запустить.

 

Для каждой запускаемой программы драйвер компилятора

 

первым делом проверяет префикс опции -B, если есть. Если

 

by

 

программа не найдена или опция -B отсутствует, драйвер

 

использует значение, хранимое в переменной окружения

 

PIC30_EXEC_PREFIX, если оно задано. Подробнее см. п. 3.6.

 

«Переменные окружения». Наконец, драйвер будет искать

 

для программ текущую переменную окружения PATH.

 

Префикс опции -B, который эффективно определяет названия

 

каталогов, также используется для библиотек

 

компоновщиком, потому что компилятор переводит его в

 

опцию -L для компоновщика. Он также применяется для

 

включаемых препроцессором файлов, поскольку компилятор

 

переводит его в опцию -isystem для препроцессора. В этом

 

случае компилятор добавляет к префиксу include.

 

Другой, очень похожий на опцию -B способ задать префикс,

 

заключается в использовании переменной окружения

 

PIC30_EXEC_PREFIX

 

 

-specs=file

Обработать файл после того, как компилятор причитает

Translated

стандартный файл specs, для того, чтобы аннулировать

умолчания, которые управляющая программа pic30-gcc

 

использует для определения, какие опции передавать

 

pic30-cc1, pic30-as, pic30-ld, и т.п. В командной

 

строке может быть определено больше одной опции

 

-specs=file, и все они будут обработаны в порядке слева

 

направо.

 

 

3.5.11. Опции для соглашений по генерации кода

Опции формы -fflag определяют машинно-независимые признаки. Большинство опций имеют как положительные, так и отрицательные формы; отрицательная форма

DS51284H(ru) стр. 3-24

© 2008 Microchip Technology Inc.

Глава 3. Использование компилятора в командной строке

-ffoo будет -fno-foo. В таблице ниже приводится только одна из форм (та, которая не является умолчанием.)

ТАБЛИЦА 3-15. ОПЦИИ СОГЛАШЕНИЙ О ГЕНЕРАЦИИ КОДА

Опция

 

Описание

 

 

 

-fargument-alias

 

Определяет возможные соотношения между параметрами и

-fargument-noalias

 

между параметрами и глобальными данными.

-fargument-

 

-fargument-alias — определяет, что аргументы

noalias-global

 

(параметры) могут перекрываться друг с другом и с

 

 

глобальной областью памяти.

 

 

.

 

 

-fargument-noalias — определяет, что аргументы не

 

 

A

 

 

могут перекрываться друг с другом, но могут перекрываться

 

 

с глобальной областью памяти.

 

 

-fargument-noalias-global — определяет, что

 

 

Wilson

 

 

аргументы не могут перекрываться друг с другом и с

 

 

глобальной областью памяти.

 

 

Каждый язык будет автоматически использовать ту опцию,

 

 

какая необходима по языковому стандарту. Вам

 

 

необязательно использовать эти опции самому.

-fcall-saved-reg

 

Трактовать регистр с именем reg как доступный регистр

 

 

сохраняемый функциями. Он может быть выделен даже для

 

 

временных нужд или переменных, которые существуют до и

 

 

после вызова. Функции, компилированные таким способом,

 

 

будут сохранять и восстанавливать регистр reg, если они

 

 

используют его.

 

 

Использование этой опции с указателями фрейма или стека

 

 

является ошибкой. Использование этой опции для другого

 

 

регистра, которому отводится фиксированная повсеместная

 

 

роль в машинной модели исполнения, приведет к

Translated

byкатастрофическим результатам.

 

Беда другого свойства произойдет при использовании этой

 

 

 

 

опции для регистра, в котором функция может возвращать

 

 

результат.

 

 

Этот флаг должен использоваться равным образом для всех

 

 

модулей.

 

 

 

-fcall-used-reg

 

Трактовать регистр с именем reg как доступный регистр,

 

 

который затирается функциями. Он может быть выделен для

 

 

временных нужд или переменных, которые существуют

 

 

только до вызова. Функции, компилированные таким

 

 

способом, будут не будут сохранять и восстанавливать

 

 

регистр reg.

 

 

Использование этой опции с указателями фрейма или стека

 

 

является ошибкой. Использование этой опции для другого

 

 

регистра, которому отводится фиксированная повсеместная

 

 

роль в машинной модели исполнения, приведет к

 

 

катастрофическим результатам.

 

 

Этот флаг должен использоваться равным образом для всех

 

 

модулей.

 

 

 

-ffixes-reg

 

Трактовать регистр с именем reg как защищенный регистр;

 

 

генерируемый код никогда не должен ссылаться на него

 

 

(кроме, возможно, как на указатели стека и фрейма и

 

 

некоторые другие регистры постоянного назначения).

 

 

reg должно быть именем регистра, например:

 

 

-ffixed-w3

 

 

 

© 2008 Microchip Technology Inc.

DS51284H(ru) стр. 3-25

16-битовый компилятор Си. Руководство

ТАБЛИЦА 3-15. (ПРОД-Е) ОПЦИИ СОГЛАШЕНИЙ О ГЕНЕРАЦИИ КОДА

 

Опция

 

 

Описание

 

 

 

 

 

-finstrument-functions

 

Генерировать инструментальные вызовы на входе и выходе

 

 

 

функции. Сразу после входа в функцию и точно перед

 

 

 

выходом из функции, будут вызваны следующие

 

 

 

профилирующие функции с адресом текущей функции и

 

 

 

местоположением вызова.

 

 

 

void __cyg_profile_func_enter

 

 

 

(void *this_fn, void *call_site);

 

 

 

void __cyg_profile_func_exit

 

 

 

(void *this_fn, void *call_site);

 

 

 

Первый аргумент является адресом начала текущей функции

 

 

 

 

.

 

 

 

и однозначно может быть обнаружен в таблице символов.

 

 

 

Функции профилирования должны быть предусмотрены

 

 

 

пользователем.

A

 

 

 

 

 

 

 

Такое оснащение функций требует использования указателя

 

 

 

фреймов. Некоторые уровни оптимизации запрещают

 

 

 

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

 

 

 

задание опции -fno-omit-frame-pointer.

 

 

 

Это оснастка также делается для функций, inline

 

 

 

встраиваемых в другие функции. Профилирующие вызовы

 

 

 

будут указывать где, в принципе, происходит вход и выход из

 

 

 

inline встроенной функции. Это означает, что должны быть

 

 

 

доступны адресуемые версии таких функций. Если все

 

 

 

используемые вами функции встроены inline, вышесказанное

 

 

 

Wilson

 

 

 

 

может означать дополнительное увеличение размеров кода.

 

 

 

Если extern inline используется в вашем коде Cи, то

 

 

 

должна быть предусмотрена адресуемая версия таких

 

 

 

функций.

 

 

 

 

Если функции присвоен атрибут no_instrument_function,

 

 

by

 

 

 

 

тогда эта оснастка не будет сделана.

 

-fno-ident

 

Игнорировать директиву #ident

 

 

 

 

 

-fpack-struct

 

Паковать члены структур вместе без пропусков. Обычно вы

 

 

 

не горите желанием использовать эту опцию, поскольку она

 

 

 

делает код не оптимальным, а смещения членов структур не

 

 

 

будут согласовываться с системными библиотеками.

 

 

 

Устройство dsPIC® требует, чтобы слова были выровнены по

 

 

 

границе четных байтов, так что следует быть весьма

 

 

 

аккуратными при использовании атрибута упаковки, чтобы

 

 

 

избежать ошибок адресации на этапе исполнения.

 

 

 

 

 

-fpcc-struct-return

 

Возвращать значения коротких struct и union, подобно

 

Translated

 

длинным, в памяти, а не в регистрах. Это соглашение менее

 

 

эффективно, но у него есть преимущество совместимости

 

 

вызовов между файлами, откомпилированными 16-битовым

 

 

компилятором, и файлами, откомпилированными другими

 

 

компиляторами.

 

 

 

Короткие структуры и союзы — те, чей размер и

 

 

выравнивание соответствует одному из целых типов.

 

 

 

 

 

 

 

 

-fno-short-double

 

По умолчанию компилятор использует тип double

 

 

 

эквивалентный типу float. Эта опция делает double

 

 

 

эквивалентным long double. Выборочное применение этой

 

 

 

опции к разным модулям может иметь непредсказуемые

 

 

 

результаты, если модули совместно используют данные типа

 

 

 

double как непосредственно, через передачу аргументов,

 

 

 

так и косвенно, через общее буферное пространство.

 

 

 

Штатные библиотеки предусматривают обе установки опции.

 

 

 

 

 

-fshort-enums

 

Выделять для типа enum только такое количество байтов,

 

 

 

которое нужно для объявленного диапазона возможных

 

 

 

значений. А именно, тип enum будет эквивалентен

 

 

 

наименьшему целому типу, который его вмещает.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DS51284H(ru) стр. 3-26

© 2008 Microchip Technology Inc.

Соседние файлы в папке Микропроцессорная техника Сторожок