Программирование  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
Вопросы?

Кратко о Linux

  • 1.
  • 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.
    Пример forkif (!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 LinusTorvalds активно пользуется и изучает Minix, хочет ее усовершенствовать Tanenbaum запрещает это делать 1991 Torvalds начинает писать свою ОС под GPL, называет ее Linux
  • 20.
  • 21.
    Distributives Linux isOpenSource , поэтому каждый может создавать свою версию Дистрибутив = ядро + набор программ + инсталлятор Большинство дистрибутивов основаны на Debian или RadHat
  • 22.
  • 23.
  • 24.
  • 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 /*
  • 35.
  • 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.
    Структура makefileTARGET : DEPENDENCY ... COMMAND ... Команда – некоторое действие по достижению цели Цель – результат выполнения списка команд Зависимость – цель, которую необходимо предварительно достичь
  • 51.
    Пример makefileall : 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
  • 52.