мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
soft:gcc [2025/03/18 10:39] – ↷ Страница перемещена из playground:gcc в soft:gcc radi0devsoft:gcc [2026/03/03 15:27] (текущий) radi0dev
Строка 1: Строка 1:
 ====== gcc ====== ====== gcc ======
  
 +GCC- GNU Compiler Collection
  
 (https://www.opennet.ru/docs/RUS/gcc/) (https://www.opennet.ru/docs/RUS/gcc/)
Строка 138: Строка 139:
 Впрочем библиотека будет прекрасно работать и без индекса архива. Впрочем библиотека будет прекрасно работать и без индекса архива.
  
-==== Подключение статической библиотеки ====+=== Подключение статической библиотеки ===
  
 Допустим, у нас есть файл ''main.cpp'' , содержащий ''#include "libmy.h"''. Соберём (компиляция+линковка) программу: Допустим, у нас есть файл ''main.cpp'' , содержащий ''#include "libmy.h"''. Соберём (компиляция+линковка) программу:
Строка 151: Строка 152:
 ''-l<name>'' имя библиотеки задается как "name" без приставки "lib"  ''-l<name>'' имя библиотеки задается как "name" без приставки "lib" 
  
-<nowiki> 
 Компиляция либы: Компиляция либы:
-</code>cpp+<code cpp>
 // компиляция lib.cpp в объектный файл // компиляция lib.cpp в объектный файл
 g++ -c lib.cpp -o lib.o g++ -c lib.cpp -o lib.o
Строка 159: Строка 159:
 ar rcs libmylib.a lib.o ar rcs libmylib.a lib.o
 </code> </code>
 +
 Использование либы: Использование либы:
-</code>cpp+<code cpp>
 // компилим файл main с подключением либы // компилим файл main с подключением либы
 g++ main.cpp -o prog -L. -lmylib g++ main.cpp -o prog -L. -lmylib
Строка 171: Строка 172:
  
 Если вы хотите создать динамическую библиотеку, то процесс будет немного отличаться. Для этого вместо создания статической библиотеки (''libmylib.a'') вы создадите разделяемую библиотеку (''libmylib.so'' или ''.dll'' в зависимости от вашей операционной системы и компилятора) и при компиляции программы вместо флага ''-lmylib'' вы будете использовать флаг ''-lmylib.so'' или ''-lmylib.dll'', соответственно. Если вы хотите создать динамическую библиотеку, то процесс будет немного отличаться. Для этого вместо создания статической библиотеки (''libmylib.a'') вы создадите разделяемую библиотеку (''libmylib.so'' или ''.dll'' в зависимости от вашей операционной системы и компилятора) и при компиляции программы вместо флага ''-lmylib'' вы будете использовать флаг ''-lmylib.so'' или ''-lmylib.dll'', соответственно.
-</nowiki>+
  
 ==== Создание динамической библиотеки ==== ==== Создание динамической библиотеки ====
Строка 183: Строка 184:
 </code> </code>
  
-''-fPIC'' - требует от компилятора, при создании объектных файлов, порождать позиционно-независимый код (PIC - Position Independent Code), его основное отличие в способе представления адресов. Вместо указания фиксированных (статических) позиций, все адреса вычисляются исходя из смещений заданных в глобальной таблицы смещений (global offset table - GOT). Формат позиционно-независимого кода позволяет подключать исполняемые модули к коду основной программы в момент её загрузки. Соответственно, основное назначение позиционно-независимого кода - создание динамических (разделяемых) библиотек.\\+''-fPIC'' - требует от компилятора, при создании объектных файлов, порождать позиционно-независимый код (PIC - Position Independent Code), его основное отличие в способе представления адресов. Вместо указания фиксированных (статических) позиций, все адреса вычисляются исходя из смещений заданных в глобальной таблицы смещений (**g**lobal **o**ffset **t**able - GOT). Формат позиционно-независимого кода позволяет подключать исполняемые модули к коду основной программы в момент её загрузки. Соответственно, основное назначение позиционно-независимого кода - создание динамических (разделяемых) библиотек.\\
 ''-shared'' - указывает ''gcc'', что в результате должен быть собран не исполняемый файл, а "разделяемый объект" - динамическая библиотека.\\ ''-shared'' - указывает ''gcc'', что в результате должен быть собран не исполняемый файл, а "разделяемый объект" - динамическая библиотека.\\
 ''-Wl'' - Обычно, компилятор сам вызывает линковщик и передает ему параметры по своему усмотрению. Этот параметр позволяет передать линковщику опции руками. Общий вид: ''gcc -Wl,-option,value1,value2...'' что означает передать линковщику (''-Wl'') опцию ''-option'' с аргументами ''value1, value2''.\\ ''-Wl'' - Обычно, компилятор сам вызывает линковщик и передает ему параметры по своему усмотрению. Этот параметр позволяет передать линковщику опции руками. Общий вид: ''gcc -Wl,-option,value1,value2...'' что означает передать линковщику (''-Wl'') опцию ''-option'' с аргументами ''value1, value2''.\\
-''-soname'' - опция линковщика (передаваемая через ''-W''... <hl>надо дописать, но не здесь, а выше</hl>+''-soname'' - опция линковщика (передаваемая через ''-W''{{fixme}}
  
-(https://uzverss.livejournal.com/57883.html) +([[https://uzverss.livejournal.com/57883.html]]
-#### Подключение динамической библиотеки +=== Подключение динамической библиотеки === 
-<hl>недописанное</hl> +{{fixme}}