Программирование  Linux
План OpenSource  идеология История Архитектура Средства разработки Библиотеки
Open Source Методология разработки: доступность кода, а не отсутствие цены Код распространяется вместе с программой бесплатно Лицензии  GPL, LGPL, AGPL, ISC, MIT Каждая лицензия контролирует использование кода Linux  использует  GPL
GPL Право по желанию бесплатно получить полный исходный код купленного ПО Право изменять этот код и создавать на его основе ПО, также обязательно  GPL  со ссылкой на оригинал и указанием внесенных изменений
LGPL Право по желанию бесплатно получить полный исходный код купленного ПО Право изменять этот код и   использовать в своем ПО, возможно не  LGPL
Open Source Можно: - использовать - исследовать - менять - распространять Нельзя: - запрещать кому-либо все вышеперечисленное
Причины возникновения Unix   использовался в большинстве ВУЗов Unix  стал требовать деньги за пользование и разработку Tanenbaum  создал  Minix  для учебных целей, которую использовал  Torvalds Linus  начал разработку  Linux Stallman  запустил проект  GNU  и  FSF
Что есть  Unix? Ядро ОС ,  изначально созданное в  1969 Kenneth Thompson  и  Dennis Ritchie
Что есть  Unix? 40 лет развития Существует очень много клонов  Unix: BSD, System V, Solaris, HP-UX, AIX, Linux … Первая в мире коммерческая ОС Относительно легко портируема Почти весь  Internet  построен на  Unix , 80% серверов работают под  Linux
Что есть  Unix? Очень мощный  CLI – Command Line Interface Иерархическая файловая   система Многопользовательская система Многопроцессная система
Что есть  Linux? Ядро ОС с открытым кодом, созданное студентом для замены  Unix Linux –  это ядро,  GNU –  набор утилит Разрабатывается с 1991 по сей день Выбор №1 промышленности и компьютерных фанов Поддерживает огромное количество платформ:  i386, x86\64, PPC, Amiga, SPARC, ARM,  супер-компьютеры
Что есть  POSIX? Portable Operating System Interface for Unix Набор стандартов, описывающих интерфейсы между операционной системой и прикладной программой Основные вызовы: int open(const char *pathname,   int flags, mode_t mode); int close(int descriptor); ssize_t write(int descriptor, void *buffer, size_t length); ssize_t read(int descriptor, void *buffer, size_t length); int fork(); int exec * (const char *path,  … );
Пример  fork if (!fork()) { printf("I'm the child!\n"); exit(0); } else { printf("I'm the parent!\n"); wait(0); }
Richard Stallman & Linus Torvalds
История 1971  Richard Stallman  начал работать   в лаборатории искусственного интеллекта  MIT  и вошел в хакерское сообщество В те времена все программисты бесплатно делились своим кодом друг с другом
История 1980 массово начало появляться портируемое ПО Разработчики стали закрывать код как интеллектуальную собственность
История 1985  Stallman  основывает  Free Software Foundation  и начинает  GNU GNU  –  G NU is  N ot  U nix –  ОС с открытым кодом, совместимая с  Unix  на уровне программ Stallman  начинает разработку утилит для будущей системы
История 1985  Andy Tanenbaum  пишет  Unix- подобную ОС  Minix  для  i386  в целях обучения студентов 1989  Stallman  издает  GNU GPL – General Public License  или  copyleft Практически   все утилиты написаны, не хватает… ядра
История 1990 Linus Torvalds  активно пользуется и изучает  Minix,  хочет   ее усовершенствовать Tanenbaum  запрещает это делать 1991 Torvalds  начинает писать свою ОС под  GPL,  называет ее  Linux
Tux
Distributives Linux is OpenSource ,  поэтому каждый может создавать свою версию Дистрибутив = ядро + набор программ + инсталлятор Большинство дистрибутивов основаны на  Debian  или  RadHat
Distributives
Статистика
Архитектура
Shell Используется   как  CLI Из  GUI  доступна посредством эмуляторов терминала Самая популярная  bash Очень богатый интерпретатор
Shell Некоторые команды: touch file –  создать файл cp file1 file2 -  скопировать файл rm file  - удалить файл mv file1 file2  – переместить\переименовать cd directory  – изменить текущий каталог less file  – просмотреть файл man command  – справка о команде find file  – найти файл
Shell Некоторые команды: ls –  содержимое каталога ps –  информация о процессах kill <pid>  - послать процессу сигнал sudo command  – выполнить команду как  root chmod   file  – изменить права доступа ./file  – запустить файл ifconfig  – справка о настройках сети reboot  – перезагрузка
GUI X- сервер – отдельное приложение Графические программы – клиенты X- сервер сообщает программе о необходимости прорисовки, клавиатурном вводе, позиции и кликах указателя Программы сообщают серверу как их прорисовывать Программируется  Xlib, Xt, Motif, GTK+, Qt
Window manager Особый клиент  X -сервера для управления окнами Добавляет окнам декорации и кнопки управления, обрабатывает переключение между окнами и изменение размера Linux  поддерживает множество  WM: KDE, Gnome, Xfce, fluxbox, twm…
Window manager Статистика использования  WM
Файловая система EXT2, EXT3, EXT4  и  swap ( для подкачки ) Монтирует  FAT, NTFS, HFS, ReiserFS, XFS … Основные каталоги: /bin –  системные утилиты /boot –  файлы для загрузки системы /etc –  файлы конфигурации /home –  каталоги пользователей /lib –  системные и пользовательские библиотеки /media –  монтируемые разделы /usr –  пользовательские программы и библиотеки
Виртуальная файловая система Позволяет взаимодействовать с ядром через интерфейс файловой системы Основные каталоги: /dev –  файлы устройства для взаимодействия с драйверами /proc –  состояние ядра  ( процессы ) /sys –  состояние ядра  ( устройства )
Права доступа Право на чтение Право на запись Право на выполнение Идентификатор пользователя Идентификатор группы 9 бит для описателя доступа: user group other   rwx   rwx  rwx
root Суперпользователь с  ID 0 Не имеет ограничений в системе Лучше реже пользоваться правами  root Опасная команда: rm -rf /*
Users Результат команды  who:
Эмуляция  Window$ WINE –WINE is not emulator WINE –  реализация  Win API  средствами  POSIX Требует установки  MFC, VC++ runtime, VB runtime, IE6 libs, DX9 libs, .NET …
Toolkit Все разнообразие  GCC : С\С++ , Java, Fortran, Ada, Smalltalk … Perl, Python, Ruby  обычно входят в состав дистрибутива JDK, JVM, Mono  можно установить Очень много  IDE: Eclipse, NetBeans, KDevelop, QtCreator, Monodevelop, Code::Blocks, Geany, Anjuta, Vim,   Emacs +  умные редакторы
Toolkit cpp –  препроцессор: $ cat > main.c #define TRUE 1 int main(int argc, char **argv) { int true = TRUE; return(0); } $ cpp main.c int main(int argc, char **argv) {   int true = 1;   return(0); }
Toolkit c с1  –  компилятор С ,  создает ассемблерный код: cat > main.c #include <stdio.h> int main(int argc, char **argv) { printf(“Hello World\n”); return(0); } $ cpp main.c main.i $ /usr/lib/gcc/i486-linux-gnu/4.3.2/cc1 main.i $ ls main.c main.i main.s $ cat main.s .file &quot;main.i&quot; .section .rodata .LC0: .string &quot;Hello World” [long output continues...]
Toolkit as –  ассемблер: cat > main.c #include <stdio.h> int main(int argc, char **argv) { printf(“Hello World\n”); return(0); } $ cpp main.c main.i $ /usr/lib/gcc/i486-linux-gnu/4.3.2/cc1 main.i $ ls main.c main.i main.s $ as main.s -0 main.o $ ls main.c main.i main.s main.o
Toolkit collect2 –  компоновщик: /usr/lib/gcc/i486-linux-gnu/4.3.2/collect2 -m elf_i386 -static –o main /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crti.o /usr/lib/gcc/i486-linux-gnu/4.3.2/crtbeginT.o main.o /usr/lib/libc.a --start-group -lgcc -lgcc_eh -lc --end-group /usr/lib/gcc/i486-linux-gnu/4.3.2/crtend.o /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crtn.o $ ls main  main.c main.i main.o main.s $ ./main Hello World
Toolkit gcc –  все в одном флаконе: cat > main.c #include <stdio.h> int main(int argc, char **argv) { printf(“Hello World\n”); return(0); } $ gcc -static main.o  /usr/lib/libc.a -o  main $ ./main Hello World
GCC Самые полезные опции: - o < имя_файл a> -  итоговое имя программы -с – только компилировать - static –  компоновать статически - shared –  создать динамическую библиотеку - L < имя_каталога >  - где искать библиотеки - I < имя_каталога >  - где искать заголовочные файлы - s –  не создавать таблицу символов - O –  оптимизировать код - g –  генерировать отладочные символы - Wall –  показывать все предупреждения
Toolkit nm –  прочитать таблицу символов: cat > main.c #include <stdio.h> int main(int argc, char **argv) { printf(“Hello World\n”); return(0); } $ gcc main. с $ nm   main.o 00000000 T main   U puts
Toolkit strip –  удалить таблицу символов: $ gcc main. с – o main $ nm   main | grep ‘ U ’ U __libc_start_main@@GLIBC_2.0 U puts@@GLIBC_2.0 $strip main $nm main nm: main: no symbols
Toolkit ar –  создание архива модулей: $ cat > helloworld.h #include <stdio.h> int say_hello_to_world(void); int say_hello_to_this_person(const char *person); $ cat > helloworld_functions.c #include “helloworld.h” int say_hello_to_world(void) { printf(“Hello World\n”); return(0); } int say_hello_to_this_person(const char *person) { printf(“Hello %s\n”, person); return(0); } $ cat > helloworld.c #include “helloworld.h” int main(int argc char **argv) { say_hello_to_world(); say_hello_to_this_person(“everyone”); return(0); }
Toolkit ar –  создание архива модулей: $ ls helloworld.c helloworld_functions.c helloworld.h $ gcc -c helloworld_functions.c $ gcc -c helloworld.c $ ls helloworld.c helloworld_functions.c helloworld_functions.o helloworld.h helloworld.o $ ar cr libhelloworld.a helloworld_functions.o $ ls helloworld.c helloworld_functions.c helloworld_functions.o helloworld.h helloworld.o libhelloworld.a $ gcc -static -o helloworld helloworld.o libhelloworld.a $ file * helloworld:  ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.8, statically linked, not stripped helloworld.c:  ASCII C program text helloworld_functions.c: ASCII C program text helloworld_functions.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped helloworld.h:  ASCII C program text helloworld.o:  ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped libhelloworld.a:  current ar archive $ ./helloworld Hello World Hello everyone
Toolkit ldd –  показать   зависимости модуля : $ ldd /bin/ls linux-gate.so.1 =>  (0xb7f68000) librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb7f33000) libselinux.so.1 => /lib/libselinux.so.1 (0xb7f19000) libacl.so.1 => /lib/libacl.so.1 (0xb7f10000) libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7db2000) libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0  (0xb7d99000) /lib/ld-linux.so.2 (0xb7f4e000) libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7d95000) libattr.so.1 => /lib/libattr.so.1 (0xb7d90000)
Toolkit gdb –  отладчик gprof –  профайлер make –  универсальный сборщик Ко всем этим  CLI  утилитам   есть  GUI  надстройки
Структура  makefile TARGET : DEPENDENCY ... COMMAND ... Команда – некоторое действие по достижению цели Цель – результат выполнения списка команд Зависимость – цель, которую необходимо предварительно достичь
Пример  makefile all : libhelloworld.so.0.0.1 helloworld libhelloworld.so.0.0.1 : helloworld.h helloworld_functions.c gcc -c helloworld_functions.c gcc -shared -Wl,-soname,libhelloworld.so.0.0.1 -o libhelloworld.so.0.0.1 helloworld_functions.o ln -f -s libhelloworld.so.0.0.1 libhelloworld.so helloworld : helloworld.h helloworld.c libhelloworld.so.0.0.1 gcc -c helloworld.c gcc -o helloworld helloworld.o libhelloworld.so.0.0.1 install : all cp -f helloworld.h /usr/include cp -f libhelloworld.so.0.0.1 /usr/lib ln -f -s /usr/lib/libhelloworld.so.0.0.1 /usr/lib/libhelloworld.so cp helloworld /usr/bin ldconfig -v uninstall : rm -f /usr/include/helloworld.h rm -f /usr/lib/libhelloworld.so.0.0.1 /usr/lib/libhelloworld.so rm -f /usr/bin/helloworld ldconfig -v clean : rm -f *.o rm -f libhelloworld.so* rm -f helloworld
Вопросы?

More Related Content

PDF
Владимир Иванов - Безопасность Unix-подобных ОС
PDF
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
PDF
Язык программирования GO
PDF
Операционные системы GNU/Linux
PDF
Perl in da shell
PDF
Linux basics. Занятие 3.
PDF
poudriere или как я перестал волноваться и полюбил pkg
PPT
Vvedenievturbopascal
Владимир Иванов - Безопасность Unix-подобных ОС
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
Язык программирования GO
Операционные системы GNU/Linux
Perl in da shell
Linux basics. Занятие 3.
poudriere или как я перестал волноваться и полюбил pkg
Vvedenievturbopascal

What's hot (20)

PDF
Вячеслав Бирюков - Дистрибутивы Linux
PDF
RHEL 7. Контейнеры и Docker
PDF
Internationalization and localization of the python applications with gettext...
DOC
РусКрипто CTF 2010 Full Disclosure (мастер класс)
PDF
Командная строка Unix
ODP
Docker : что это, зачем, и как им пользоваться
PPT
Обработка голоса кодеком Си под Андройд? Сделано!
PPT
Обработка голоса кодеком на Си под Андроид. Сделано / Константин Цховребов (M...
PDF
Отладка в Python: 2016 edition
PPT
Root Conf2009 Fin
PDF
OpenStack и Docker: вместе и по отдельности
PDF
Rust - GDG DevFest 2016 Nizhny Novgorod
PDF
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
PPT
присяжный Root Conf2009 Beta 1
PDF
Изучение и редактирование кода
PDF
Операционные системы
PDF
Continuous Integration под микроскопом, Александр Кириллов, Evrone, Саратов
PPT
Web осень 2012 лекция 3
PPT
Web весна 2013 лекция 3
PPT
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Вячеслав Бирюков - Дистрибутивы Linux
RHEL 7. Контейнеры и Docker
Internationalization and localization of the python applications with gettext...
РусКрипто CTF 2010 Full Disclosure (мастер класс)
Командная строка Unix
Docker : что это, зачем, и как им пользоваться
Обработка голоса кодеком Си под Андройд? Сделано!
Обработка голоса кодеком на Си под Андроид. Сделано / Константин Цховребов (M...
Отладка в Python: 2016 edition
Root Conf2009 Fin
OpenStack и Docker: вместе и по отдельности
Rust - GDG DevFest 2016 Nizhny Novgorod
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
присяжный Root Conf2009 Beta 1
Изучение и редактирование кода
Операционные системы
Continuous Integration под микроскопом, Александр Кириллов, Evrone, Саратов
Web осень 2012 лекция 3
Web весна 2013 лекция 3
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Ad

Similar to Кратко о Linux (20)

PPT
Gnu linux
PPTX
операционная система Linux
ODP
Программирование Linux
ODP
Программирование Linux
ODP
Программирование Linux
PPT
Linux и свободное по
PPT
Антон Шумихин - Архитектура ОС
PDF
Александр Сомов "C++: препроцессор, компилятор, компоновщик"
PDF
Web осень 2013 лекция 2
ODP
Linux
PDF
Филипп Синицин - Системы контроля версий
PDF
доклад про Llvm
PDF
Что такое Linux?
PDF
Romanova techforum bash
PDF
Конспект вводных занятий практикума по ОС UNIX
PDF
PPSX
PDF
Ретроспектива графических интерфейсов в зеркале свободного ПО
PDF
Эффективное управление ПО под *nix
PDF
Operating Systems Hardening
Gnu linux
операционная система Linux
Программирование Linux
Программирование Linux
Программирование Linux
Linux и свободное по
Антон Шумихин - Архитектура ОС
Александр Сомов "C++: препроцессор, компилятор, компоновщик"
Web осень 2013 лекция 2
Linux
Филипп Синицин - Системы контроля версий
доклад про Llvm
Что такое Linux?
Romanova techforum bash
Конспект вводных занятий практикума по ОС UNIX
Ретроспектива графических интерфейсов в зеркале свободного ПО
Эффективное управление ПО под *nix
Operating Systems Hardening
Ad

More from Anthony Shoumikhin (7)

ODP
iOS History
ODP
Objective-C: Good and Bad
ODP
Mach-O Internals
PPT
Основы Reverse Engineering
PPT
Кратко о Mac OS X
ODP
Отладка в GDB
ODP
iOS History
Objective-C: Good and Bad
Mach-O Internals
Основы Reverse Engineering
Кратко о Mac OS X
Отладка в GDB

Кратко о Linux

  • 2. План OpenSource идеология История Архитектура Средства разработки Библиотеки
  • 3. Open Source Методология разработки: доступность кода, а не отсутствие цены Код распространяется вместе с программой бесплатно Лицензии GPL, LGPL, AGPL, ISC, MIT Каждая лицензия контролирует использование кода Linux использует GPL
  • 4. GPL Право по желанию бесплатно получить полный исходный код купленного ПО Право изменять этот код и создавать на его основе ПО, также обязательно GPL со ссылкой на оригинал и указанием внесенных изменений
  • 5. LGPL Право по желанию бесплатно получить полный исходный код купленного ПО Право изменять этот код и использовать в своем ПО, возможно не LGPL
  • 6. Open Source Можно: - использовать - исследовать - менять - распространять Нельзя: - запрещать кому-либо все вышеперечисленное
  • 7. Причины возникновения Unix использовался в большинстве ВУЗов Unix стал требовать деньги за пользование и разработку Tanenbaum создал Minix для учебных целей, которую использовал Torvalds Linus начал разработку Linux Stallman запустил проект GNU и FSF
  • 8. Что есть Unix? Ядро ОС , изначально созданное в 1969 Kenneth Thompson и Dennis Ritchie
  • 9. Что есть Unix? 40 лет развития Существует очень много клонов Unix: BSD, System V, Solaris, HP-UX, AIX, Linux … Первая в мире коммерческая ОС Относительно легко портируема Почти весь Internet построен на Unix , 80% серверов работают под Linux
  • 10. Что есть Unix? Очень мощный CLI – Command Line Interface Иерархическая файловая система Многопользовательская система Многопроцессная система
  • 11. Что есть Linux? Ядро ОС с открытым кодом, созданное студентом для замены Unix Linux – это ядро, GNU – набор утилит Разрабатывается с 1991 по сей день Выбор №1 промышленности и компьютерных фанов Поддерживает огромное количество платформ: i386, x86\64, PPC, Amiga, SPARC, ARM, супер-компьютеры
  • 12. Что есть POSIX? Portable Operating System Interface for Unix Набор стандартов, описывающих интерфейсы между операционной системой и прикладной программой Основные вызовы: int open(const char *pathname, int flags, mode_t mode); int close(int descriptor); ssize_t write(int descriptor, void *buffer, size_t length); ssize_t read(int descriptor, void *buffer, size_t length); int fork(); int exec * (const char *path, … );
  • 13. Пример fork if (!fork()) { printf(&quot;I'm the child!\n&quot;); exit(0); } else { printf(&quot;I'm the parent!\n&quot;); wait(0); }
  • 14. Richard Stallman & Linus Torvalds
  • 15. История 1971 Richard Stallman начал работать в лаборатории искусственного интеллекта MIT и вошел в хакерское сообщество В те времена все программисты бесплатно делились своим кодом друг с другом
  • 16. История 1980 массово начало появляться портируемое ПО Разработчики стали закрывать код как интеллектуальную собственность
  • 17. История 1985 Stallman основывает Free Software Foundation и начинает GNU GNU – G NU is N ot U nix – ОС с открытым кодом, совместимая с Unix на уровне программ Stallman начинает разработку утилит для будущей системы
  • 18. История 1985 Andy Tanenbaum пишет Unix- подобную ОС Minix для i386 в целях обучения студентов 1989 Stallman издает GNU GPL – General Public License или copyleft Практически все утилиты написаны, не хватает… ядра
  • 19. История 1990 Linus Torvalds активно пользуется и изучает Minix, хочет ее усовершенствовать Tanenbaum запрещает это делать 1991 Torvalds начинает писать свою ОС под GPL, называет ее Linux
  • 20. Tux
  • 21. Distributives Linux is OpenSource , поэтому каждый может создавать свою версию Дистрибутив = ядро + набор программ + инсталлятор Большинство дистрибутивов основаны на Debian или RadHat
  • 25. Shell Используется как CLI Из GUI доступна посредством эмуляторов терминала Самая популярная bash Очень богатый интерпретатор
  • 26. Shell Некоторые команды: touch file – создать файл cp file1 file2 - скопировать файл rm file - удалить файл mv file1 file2 – переместить\переименовать cd directory – изменить текущий каталог less file – просмотреть файл man command – справка о команде find file – найти файл
  • 27. Shell Некоторые команды: ls – содержимое каталога ps – информация о процессах kill <pid> - послать процессу сигнал sudo command – выполнить команду как root chmod file – изменить права доступа ./file – запустить файл ifconfig – справка о настройках сети reboot – перезагрузка
  • 28. GUI X- сервер – отдельное приложение Графические программы – клиенты X- сервер сообщает программе о необходимости прорисовки, клавиатурном вводе, позиции и кликах указателя Программы сообщают серверу как их прорисовывать Программируется Xlib, Xt, Motif, GTK+, Qt
  • 29. Window manager Особый клиент X -сервера для управления окнами Добавляет окнам декорации и кнопки управления, обрабатывает переключение между окнами и изменение размера Linux поддерживает множество WM: KDE, Gnome, Xfce, fluxbox, twm…
  • 30. Window manager Статистика использования WM
  • 31. Файловая система EXT2, EXT3, EXT4 и swap ( для подкачки ) Монтирует FAT, NTFS, HFS, ReiserFS, XFS … Основные каталоги: /bin – системные утилиты /boot – файлы для загрузки системы /etc – файлы конфигурации /home – каталоги пользователей /lib – системные и пользовательские библиотеки /media – монтируемые разделы /usr – пользовательские программы и библиотеки
  • 32. Виртуальная файловая система Позволяет взаимодействовать с ядром через интерфейс файловой системы Основные каталоги: /dev – файлы устройства для взаимодействия с драйверами /proc – состояние ядра ( процессы ) /sys – состояние ядра ( устройства )
  • 33. Права доступа Право на чтение Право на запись Право на выполнение Идентификатор пользователя Идентификатор группы 9 бит для описателя доступа: user group other rwx rwx rwx
  • 34. root Суперпользователь с ID 0 Не имеет ограничений в системе Лучше реже пользоваться правами root Опасная команда: rm -rf /*
  • 36. Эмуляция Window$ WINE –WINE is not emulator WINE – реализация Win API средствами POSIX Требует установки MFC, VC++ runtime, VB runtime, IE6 libs, DX9 libs, .NET …
  • 37. Toolkit Все разнообразие GCC : С\С++ , Java, Fortran, Ada, Smalltalk … Perl, Python, Ruby обычно входят в состав дистрибутива JDK, JVM, Mono можно установить Очень много IDE: Eclipse, NetBeans, KDevelop, QtCreator, Monodevelop, Code::Blocks, Geany, Anjuta, Vim, Emacs + умные редакторы
  • 38. Toolkit cpp – препроцессор: $ cat > main.c #define TRUE 1 int main(int argc, char **argv) { int true = TRUE; return(0); } $ cpp main.c int main(int argc, char **argv) { int true = 1; return(0); }
  • 39. Toolkit c с1 – компилятор С , создает ассемблерный код: cat > main.c #include <stdio.h> int main(int argc, char **argv) { printf(“Hello World\n”); return(0); } $ cpp main.c main.i $ /usr/lib/gcc/i486-linux-gnu/4.3.2/cc1 main.i $ ls main.c main.i main.s $ cat main.s .file &quot;main.i&quot; .section .rodata .LC0: .string &quot;Hello World” [long output continues...]
  • 40. Toolkit as – ассемблер: cat > main.c #include <stdio.h> int main(int argc, char **argv) { printf(“Hello World\n”); return(0); } $ cpp main.c main.i $ /usr/lib/gcc/i486-linux-gnu/4.3.2/cc1 main.i $ ls main.c main.i main.s $ as main.s -0 main.o $ ls main.c main.i main.s main.o
  • 41. Toolkit collect2 – компоновщик: /usr/lib/gcc/i486-linux-gnu/4.3.2/collect2 -m elf_i386 -static –o main /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crti.o /usr/lib/gcc/i486-linux-gnu/4.3.2/crtbeginT.o main.o /usr/lib/libc.a --start-group -lgcc -lgcc_eh -lc --end-group /usr/lib/gcc/i486-linux-gnu/4.3.2/crtend.o /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crtn.o $ ls main main.c main.i main.o main.s $ ./main Hello World
  • 42. Toolkit gcc – все в одном флаконе: cat > main.c #include <stdio.h> int main(int argc, char **argv) { printf(“Hello World\n”); return(0); } $ gcc -static main.o /usr/lib/libc.a -o main $ ./main Hello World
  • 43. GCC Самые полезные опции: - o < имя_файл a> - итоговое имя программы -с – только компилировать - static – компоновать статически - shared – создать динамическую библиотеку - L < имя_каталога > - где искать библиотеки - I < имя_каталога > - где искать заголовочные файлы - s – не создавать таблицу символов - O – оптимизировать код - g – генерировать отладочные символы - Wall – показывать все предупреждения
  • 44. Toolkit nm – прочитать таблицу символов: cat > main.c #include <stdio.h> int main(int argc, char **argv) { printf(“Hello World\n”); return(0); } $ gcc main. с $ nm main.o 00000000 T main U puts
  • 45. Toolkit strip – удалить таблицу символов: $ gcc main. с – o main $ nm main | grep ‘ U ’ U __libc_start_main@@GLIBC_2.0 U puts@@GLIBC_2.0 $strip main $nm main nm: main: no symbols
  • 46. Toolkit ar – создание архива модулей: $ cat > helloworld.h #include <stdio.h> int say_hello_to_world(void); int say_hello_to_this_person(const char *person); $ cat > helloworld_functions.c #include “helloworld.h” int say_hello_to_world(void) { printf(“Hello World\n”); return(0); } int say_hello_to_this_person(const char *person) { printf(“Hello %s\n”, person); return(0); } $ cat > helloworld.c #include “helloworld.h” int main(int argc char **argv) { say_hello_to_world(); say_hello_to_this_person(“everyone”); return(0); }
  • 47. Toolkit ar – создание архива модулей: $ ls helloworld.c helloworld_functions.c helloworld.h $ gcc -c helloworld_functions.c $ gcc -c helloworld.c $ ls helloworld.c helloworld_functions.c helloworld_functions.o helloworld.h helloworld.o $ ar cr libhelloworld.a helloworld_functions.o $ ls helloworld.c helloworld_functions.c helloworld_functions.o helloworld.h helloworld.o libhelloworld.a $ gcc -static -o helloworld helloworld.o libhelloworld.a $ file * helloworld: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.8, statically linked, not stripped helloworld.c: ASCII C program text helloworld_functions.c: ASCII C program text helloworld_functions.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped helloworld.h: ASCII C program text helloworld.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped libhelloworld.a: current ar archive $ ./helloworld Hello World Hello everyone
  • 48. Toolkit ldd – показать зависимости модуля : $ ldd /bin/ls linux-gate.so.1 => (0xb7f68000) librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb7f33000) libselinux.so.1 => /lib/libselinux.so.1 (0xb7f19000) libacl.so.1 => /lib/libacl.so.1 (0xb7f10000) libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7db2000) libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7d99000) /lib/ld-linux.so.2 (0xb7f4e000) libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7d95000) libattr.so.1 => /lib/libattr.so.1 (0xb7d90000)
  • 49. Toolkit gdb – отладчик gprof – профайлер make – универсальный сборщик Ко всем этим CLI утилитам есть GUI надстройки
  • 50. Структура makefile TARGET : DEPENDENCY ... COMMAND ... Команда – некоторое действие по достижению цели Цель – результат выполнения списка команд Зависимость – цель, которую необходимо предварительно достичь
  • 51. Пример makefile all : libhelloworld.so.0.0.1 helloworld libhelloworld.so.0.0.1 : helloworld.h helloworld_functions.c gcc -c helloworld_functions.c gcc -shared -Wl,-soname,libhelloworld.so.0.0.1 -o libhelloworld.so.0.0.1 helloworld_functions.o ln -f -s libhelloworld.so.0.0.1 libhelloworld.so helloworld : helloworld.h helloworld.c libhelloworld.so.0.0.1 gcc -c helloworld.c gcc -o helloworld helloworld.o libhelloworld.so.0.0.1 install : all cp -f helloworld.h /usr/include cp -f libhelloworld.so.0.0.1 /usr/lib ln -f -s /usr/lib/libhelloworld.so.0.0.1 /usr/lib/libhelloworld.so cp helloworld /usr/bin ldconfig -v uninstall : rm -f /usr/include/helloworld.h rm -f /usr/lib/libhelloworld.so.0.0.1 /usr/lib/libhelloworld.so rm -f /usr/bin/helloworld ldconfig -v clean : rm -f *.o rm -f libhelloworld.so* rm -f helloworld