Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для Linux. ΠŸΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 11

Автор ΠœΠ°Ρ€ΠΊ ΠœΠΈΡ‚Ρ‡Π΅Π»Π»

2.3.1. Архивы

Архив (ΠΈΠ»ΠΈ статичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°) β€” это коллСкция ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², хранящаяся Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° (ΠΎΠ½ являСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½Ρ‹ΠΌ эквивалСнтом LIB-Ρ„Π°ΠΉΠ»Π° Π² Windows). Когда Π°Ρ€Ρ…ΠΈΠ² поступаСт Π½Π° Π²Ρ…ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°, Ρ‚ΠΎΡ‚ ΠΈΡ‰Π΅Ρ‚ Π² Π½Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΈΡ… ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ нСпосрСдствСнно.

Архив создаСтся посрСдством ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ar. АрхивныС Ρ„Π°ΠΉΠ»Ρ‹ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .a, Π° Π½Π΅ .o, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΎ Π·Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ test1.o ΠΈ test2.o Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Π°Ρ€Ρ…ΠΈΠ² libtest.a:

% ar cr libtest.a test1.o test2.o

Π€Π»Π°Π³ΠΈ cr ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ar ΠΎ нСобходимости ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΠ².[8] Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ этот Π°Ρ€Ρ…ΠΈΠ² ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π»Π°Π³Π° -ltest компилятора gcc ΠΈΠ»ΠΈ g++, ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΡ‹Π²Π°Π»ΠΎΡΡŒ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 1.2.2, "Компоновка ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²".

ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Π°Ρ€Ρ…ΠΈΠ², ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ ΠΈΡ‰Π΅Ρ‚ Π² Π½Π΅ΠΌ опрСдСлСния всСх символичСских констант (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…), Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ даСтся ссылка Π² ΡƒΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, содСрТащиС опрСдСлСния этих констант, ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ ΠΈΠ· Π°Ρ€Ρ…ΠΈΠ²Π° ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² исполняСмый Ρ„Π°ΠΉΠ». Π’ связи с Ρ‚Π΅ΠΌ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ просматриваСт Π°Ρ€Ρ…ΠΈΠ² ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π°Ρ€Ρ…ΠΈΠ²Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π΄Π²Π° Ρ„Π°ΠΉΠ»Π°: test.c (листинг 2.7) ΠΈ app.c (листинг 2.8).

Листинг 2.7. (test.c) ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ исходный Ρ„Π°ΠΉΠ»

int f() {

 return 3;

}

Листинг 2.8. (app.c) Π’Ρ‚ΠΎΡ€ΠΎΠΉ исходный Ρ„Π°ΠΉΠ»

int main() {

 return f();

}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ допустим, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» test.o Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ вмСстС с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π² Π°Ρ€Ρ…ΠΈΠ² libtest.a. Π’ΠΎΠ³Π΄Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ:

% gcc -ΠΎ app -L. -ltest app.ΠΎ

app.ΠΎ: In function 'main':

app.ΠΎ(.text+0x4): undefined reference to 'f'

collect2: ld returned 1 exit status

Как слСдуСт ΠΈΠ· сообщСния ΠΎΠ± ошибкС, нСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» libtest.Π° содСрТит ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f(), ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Π½Π΅ нашСл Π΅Π΅. Π­Ρ‚ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Ρ‚Π΅ΠΌ. Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ свои Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ, просматривая Π°Ρ€Ρ…ΠΈΠ² сразу ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ встрСчаСтся Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС. На Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Π΅Ρ‰Π΅ Π½Π΅ Π·Π½Π°Π», Ρ‡Ρ‚ΠΎ Π² дальнСйшСм Π΅ΠΌΡƒ встрСтится ссылка Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ f(). Если ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ пСрСстановку, всС Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

% gcc -ΠΎ app Π°Ρ€Ρ€.ΠΎ -L. -ltest

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² Ρ„Π°ΠΉΠ»Π΅ app.ΠΎ ссылки Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ f() заставляСт ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» test.o ΠΈΠ· Π°Ρ€Ρ…ΠΈΠ²Π° libtest.Π°.

2.3.2. БовмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

БовмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° (извСстная Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ динамичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°) Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Π°Ρ€Ρ…ΠΈΠ² Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° прСдставляСт собой Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Но ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π΅ΡΡ‚ΡŒ ряд Π²Π°ΠΆΠ½Ρ‹Ρ… Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ. Π‘Π°ΠΌΠΎΠ΅ основноС ΠΈΠ· Π½ΠΈΡ… Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, ΠΊΠΎΠ³Π΄Π° совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π² исполняСмый Ρ„Π°ΠΉΠ» Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊΠΎΠ΄ самой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ: Π² Π½Π΅ΠΌ присутствуСт лишь ссылка Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. Если с нСсколькими ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ компонуСтся ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, всС ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π½Π΅Π΅, Π½ΠΎ Π½ΠΈ Π² ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π½ΠΈΡ… ΠΎΠ½Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π°. Π’Π°ΠΊ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ΡΡ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ "совмСстноС использованиС".

Π’Ρ‚ΠΎΡ€ΠΎΠ΅ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° β€” это Π½Π΅ просто коллСкция ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ссылки. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, входящиС Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Благодаря этому ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΠΌΠΏΠΎΠ½ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ вмСстС с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ, всСгда ΠΈΠΌΠ΅ΡŽΡ‚ доступ ΠΊΠΎ всСму Π΅Π΅ содСрТимому, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ части.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π½ΡƒΠΆΠ½ΠΎ сначала ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Π΅Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΎΠΏΡ†ΠΈΠΈ -fPIC, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

% gcc -с -fPIC test1.c

ΠžΠΏΡ†ΠΈΡ -fPIC сообщаСт компилятору ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» test1.o станСт Ρ‡Π°ΡΡ‚ΡŒΡŽ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ-нСзависимый ΠΊΠΎΠ΄

АббрСвиатура PIC (Position-Independent Code) Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΎΠΏΡ†ΠΈΠΈ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ΡΡ ΠΊΠ°ΠΊ "ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ-нСзависимый ΠΊΠΎΠ΄". Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ адрСсам Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, поэтому ΠΊΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ адрСса (ΠΈΠ»ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ), ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½Π° Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π°. ВсС это Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ касаСтся программистов, просто Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ -fPIC ΠΏΡ€ΠΈ компиляции Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ.

Π—Π°Ρ‚Π΅ΠΌ слСдуСт ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ:

% gcc -shared -fPIC -ΠΎ libtest.so test1.o test2.o

ΠžΠΏΡ†ΠΈΡ -shared заставляСт ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π° Π½Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ». Π’Π°ΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .so. Подобно статичСскому Π°Ρ€Ρ…ΠΈΠ²Ρƒ, имя Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ всСгда начинаСтся с прСфикса lib, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π° Ρ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» являСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ.

Компоновка совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ Π°Ρ€Ρ…ΠΈΠ²Π°. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ„Π°ΠΉΠ» libtest.so, Ссли ΠΎΠ½ находится Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· стандартных систСмных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²:

% gcc -ΠΎ app Π°Ρ€Ρ€.ΠΎ -L. ltest

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΠΎΠ±Π° Ρ„Π°ΠΉΠ»Π°: libtest.Π° ΠΈ libtest.so. Каким ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅? Он просматриваСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ (сначала Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² ΠΎΠΏΡ†ΠΈΠΈ -L, Π·Π°Ρ‚Π΅ΠΌ стандартныС) ΠΈ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ‚ΡƒΡ‚ ΠΆΠ΅ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ поиск. Если Π² Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ присутствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΠ½ ΠΈ выбираСтся. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²Ρ‹Π±ΠΎΡ€ дСлаСтся Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ссли явно Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅. ΠžΡ‚Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ статичСскому Π°Ρ€Ρ…ΠΈΠ²Ρƒ позволяСт опция -static. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π°Ρ€Ρ…ΠΈΠ² libtest.a, Π΄Π°ΠΆΠ΅ Ссли присутствуСт Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° libtest.so:

% gcc -static -ΠΎ app Π°Ρ€Ρ€.ΠΎ -L. -ltest

Команда ldd Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ список совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΊ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ исполняСмому Ρ„Π°ΠΉΠ»Ρƒ. ВсС ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ доступны ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° ldd сообщаСт ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ: ld-linux.so. Она являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° динамичСской ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π² Linux.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ LD_LIBRARY_PATH

Когда ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π² исполняСмый Ρ„Π°ΠΉΠ» ссылку Π½Π° Π½Π΅Π΅, Π½ΠΎ Π² этой ссылкС ΡƒΠΊΠ°Π·Π°Π½ Π½Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ имя Ρ„Π°ΠΉΠ»Π°. ΠŸΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ систСма сама Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π΅Π΅. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ систСма просматриваСт лишь ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ /lib ΠΈ /usr/lib. Если Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° находится Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, ΠΎΠ½Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½Π° ΠΈ систСма откаТСтся Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

Одно ΠΈΠ· Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Ρ„Π»Π°Π³Π° -Wl,-rpath:

% gcc -ΠΎ app Π°Ρ€Ρ€.ΠΎ -L. -ltest -Wl,-rpath,/usr/local/lib

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² случаС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ app систСма Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /usr/local/lib.

Но Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ LD_LIBRARY_PATH ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Подобно ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ срСды PATH, пСрСмСнная LD_LIBRARY_PATH прСдставляСт собой Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ двоСточиями список ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ². Если, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΎΠ½Π° Ρ€Π°Π²Π½Π° /usr/local/lib:/opt/lib, Ρ‚ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ /usr/local/lib ΠΈ /opt/lib Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅Π΄ стандартными ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ /lib ΠΈ /usr/lib. НСобходимо Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Π² Π½Π΅ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, обнаруТивая ΠΎΠΏΡ†ΠΈΡŽ -L Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС.[9]

2.3.3. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

Π”Π°ΠΆΠ΅ Ссли ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ Π±Ρ‹Π»ΠΈ Π·Π°Π΄Π°Π½Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, всС Ρ€Π°Π²Π½ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ… ΠΏΠΎΡ‡Ρ‚ΠΈ навСрняка присутствуСт. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ компилятор gcc автоматичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ языка Π‘: libc. Π’ Π½Π΅Π΅, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π½Π΅ входят матСматичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Они находятся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, libm, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Ρ‚ΡŒ явно. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ compute, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ тригономСтричСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ sin() ΠΈ cos()), Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

% gcc -ΠΎ compute compute.c -lm

ΠŸΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° C++, компилятор c++ ΠΈΠ»ΠΈ g++ автоматичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊ Π½ΠΈΠΌ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ языка C++: libstdc++.

2.3.4. Зависимости ΠΌΠ΅ΠΆΠ΄Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ часто связаны ΠΎΠ΄Π½Π° с Π΄Ρ€ΡƒΠ³ΠΎΠΉ. НапримСр, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Linux-систСмах Π΅ΡΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° libtiff, содСрТащая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ чтСния ΠΈ записи графичСских Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° TIFF. Она, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ libjpeg (ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ JPEG-ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ) ΠΈ libz (ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ сТатия).