Администрирование локальных сетей

Информация - Компьютеры, программирование

Другие материалы по предмету Компьютеры, программирование

?го запускаеться тот соотвествующий компилятор)

  • После компиляция (этап создания) обьектных файлов запускаеться линковщик (HP-UX linker (ld))
  • На картинке можете увидеть более детальный процес компиляции:

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    Для более детального просмтотра этапов прохождения компиляции, можно посмотреть задав опцию v (verbose)

     

    $ cc -Aa -v main.c myfunc.c

    cc: CCOPTS is not set.

    main.c:

    /opt/langtools/lbin/cpp.ansi main.c /var/tmp/ctmAAAa16327 -D__hp9000s700 -D__hp9000s800 -D__hppa -D__hpux -D__unix -D_PA_RISC1_1

    cc: Entering Preprocessor.

    /opt/ansic/lbin/ccom /var/tmp/ctmAAAa16327 main.o -Oq00,al,ag,cn,Lm,sz,Ic,vo,lc,mf,Po,es,rs,sp,in,vc,pi,fa,pe,Rr,Fl,pv,pa,nf,cp,lx,st,ap,Pg,ug,lu,dp,fs,bp,wp! -Aa

    myfunc.c:

    /opt/langtools/lbin/cpp.ansi myfunc.c /var/tmp/ctmAAAa16327 -D__hp9000s700 -D__hp9000s800 -D__hppa -D__hpux -D__unix -D_PA_RISC1_1

    cc: Entering Preprocessor.

    /opt/ansic/lbin/ccom /var/tmp/ctmAAAa16327 myfunc.o -Oq00,al,ag,cn,Lm,sz,Ic,vo,lc,mf,Po,es,rs,sp,in,vc,pi,fa,pe,Rr,Fl,pv,pa,nf,cp,lx,st,ap,Pg,ug,lu,dp,fs,bp,wp! -Aa

    cc: LPATH is /usr/lib/pa1.1:/usr/lib:/opt/langtools/lib:

    /usr/ccs/bin/ld /opt/langtools/lib/crt0.o -u main main.o myfunc.o -lc

    cc: Entering Link editor.

     

    Из этого примера можно посмотреть такие этапы

    cpp.ansi это С препроцесор после этого запускаеться /lib/ccom эта програма(компилятор) уже создает файлы. Последний этап это этап создания исполняемого кода, это Линкер, которые связывает все обьекты .

     

    Что такое Обьектный файл ?

    Обьектный файл содержет машиные инструкции а данные с которых линкеровщик создает исполняемую програму. Каждий обьектный файл содержит НАЗВАНИЕ (symbol name) и ссылку на это название.

    Названия делятся на 3 категории:

    1. Локальные обьявления (local definition) это коды или данные которые могут использоваться только в том обьектном файле где они обьявленые.
    2. Глобальные обьявления (global definition) это обьявления прорцедур,функций,данных котоые могут быть доступны из других обьектных файлов
    3. Внешние ссылки (extern references) это обьявления которые глобальный инаходяться в других обьектных файлах.

     

    Для просмотра обявлений успользуеться програма nm.

     

    Этап линкирования.

     

    Линкирование это последний этап создания запускания файлов, он в включает в a.out файл все ссылки обьявлений и их реализации , которые встречаються в програме. Если например есть сылка а нет реализаци то линкировщик скажет что не находит внешнего обявления и выдаст следюющее:

    $ cc main.c

    /bin/ld: Unsatisfied symbol:

    my_func (code)

     

    Работа с библиотеками

     

    Очень полезным средсвом для хранения сылски реализаций внешних обьявлений есть библиотеки. Стандартная библиотека libc которая содержит основные функции для C,Fortran

     

    Библиотеки называються libname.sfx

    Name название библиотеки, которая идентефецирует библиотеку

    Sfx - если .а архив, .sl общедоступная библиотека.

     

    Для того что б указать компилятору библиотеку то указываеться через опцию l. Например

    --lm (подключает стандартну математическую библиотеку libm.a).

    По умолчанию подключаються библиотеки libcl,libisamstub,libc.

    По умолчанию библиотеки ищатся по путям /lib,/usr/lib,lib/libp. Можно задать пути где искать:

    1. Переменой коружения LPATH
    2. Опция линкера -L

     

     

    Также для каждой програмы входит обьектный файл /lib/crt0.o В этом файле содержаться таочки входа в програму,простомтр аргументов и прочее.

     

     

    Можна прочитать о фунциях которые есть в стандартных библиотеках исполюзую man-page

    Вызовы (функции) описываються следующим образом

    Name(nL)

    Name название

    N 2-системные вызовы, 3-другие библиотеки

    L буква которая означает к которой библиотеке вызов относиться

     

    Вот примеры:

    ГрупаОписание(2)Системные вызовы, низкоуровневый доступ до системных ресурсов. (работа с файлами,сигналы,управление процесами). Все вызовы содержаться в libc(3C)Стандартные С вызовы . Находяться в libc(3S)Стандартные вызова input/output (stdio(3S)) Находяться в libc(3M)Математические фунции. Для подключения используеться lm или -lM(3G)Графические фунции(3I)Библиотека инструментариев(3X)Разные специализированые библиотеки

    Сравнительные оценки Архивных и Общедоступных библиотекРасширение.a.slОбьектный кодДелаеться с обьектного кодаДелаеться с независимо-позиционого (PIC) обьектного кода.Делаеться компилятором с опцией +z или +Z.СозданиеСоставляеться обьектные файлы ar командойСоставляеться PIC обьекты с ld командойСвязывание адресса вызоваАдресс определяется при линкировании програмыАдресс определяеться при выполнении програмы a.outСодержит в себе все вызовы и даныеСодержит только таблицу где где содержаться адреса иназвание библитекПри запускеКаждая програма содержит собственую копию библиотекиВсе програмы используют одну бублиотеку, которая в памяти присутствующая только один раз

     

    Опции компилятора cc

     

    cс [option] files

    • -Amode
    • mode=c По умолчанию, стандартный компилятор С (по Керниган, Риттчи)
    • mode=a ANSI C (ISO 9899:1990)
    • mode=e Расшириное ANSI C

     

    • -c Отменить фазу редактирования связей и создавать обектный файл даже в случае программы, состоящей только из одного модуля.
    • -p Сгенерировать дополнительные команды для подсчета числа обращений к каждой функции. Кроме того, если имеет место фаза редактирования связей, стандартная подпрограмма инициализации заменяется на такую, которая автоматически вызывает функцию monitor(3C) и обеспечивает запись файла mount.out при нормальном завершении обектной программы. Пр?/p>