Skip to content

Commit beebb69

Browse files
committed
Fix dynamic-linking.ro.md file
Modify helloworld file
1 parent 2ce9746 commit beebb69

File tree

2 files changed

+33
-7
lines changed

2 files changed

+33
-7
lines changed

dynamic-linking.ro.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Diferența este că acum, folosim linkare dinamică în loc de linkare statică
1313
Pentru aceasta, am renunțat la argumentul `-static` folosit la linkare.
1414

1515
Pentru acest exemplu, obținem un singur executabil `main`, din legarea statică cu biblioteca `libinc.a` și legarea dinamică cu biblioteca standard C.
16-
Similar exemplului din directorul `05-static/, folosim comanda `make` pentru a obține executabilul `main`:
16+
Similar exemplului din directorul `05-static/`, folosim comanda `make` pentru a obține executabilul `main`:
1717

1818
```console
1919
[..]/06-dynamic$ ls
@@ -39,11 +39,11 @@ main: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically link
3939

4040
[..]/06-dynamic$ file ../05-static/main
4141
../05-static/main: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=60adf8390374c898998c0b713a8b1ea0c255af38, not stripped
42-
``
42+
```
4343

4444
Fișierul executabil `main` obținut prin linkare dinamică are un comportament identic fișierului executabil `main` obținut prin linkare statică.
4545
Observăm că dimensiunea sa este mult mai redusă: ocupă `7 KB` comparativ cu `600 KB` cât avea varianta sa statică.
46-
De asemenea, folosind utilitarul `file`, aflăm că este executabil obținut prin linkare dinamică (*dynamically linked*), în vreme cel obținut în exemplul anterior este executabil obținut prin linkare statică (*statically linked).
46+
De asemenea, folosind utilitarul `file`, aflăm că este executabil obținut prin linkare dinamică (*dynamically linked*), în vreme cel obținut în exemplul anterior este executabil obținut prin linkare statică (*statically linked*).
4747

4848
Investigăm simbolurile executabilului:
4949

@@ -66,7 +66,7 @@ Investigăm simbolurile executabilului:
6666

6767
Simbolurile obținute din modulul obiect `main.o` și din biblioteca statică `libinc.o` sunt rezolvate și au adrese stabilite.
6868
Observăm că folosirea bibliotecii standard C a dus la existența simboblului `_start`, care este entry pointul programului.
69-
Dar, simbolurile din biblioteca standard C, (`printf`, __libc_start_main`) sunt marcate ca nedefinite (`U`).
69+
Dar, simbolurile din biblioteca standard C, (`printf, __libc_start_main`) sunt marcate ca nedefinite (`U`).
7070
Aceste simboluri nu sunt prezente în executabil: rezolvarea, stabilirea adreselor și relocarea lor se va realiza mai târziu, la încărcare (load time).
7171

7272
La încărcare, o altă componentă software a sistemului, loaderul / linkerul dinamic, se va ocupa de:
@@ -82,7 +82,7 @@ Putem investiga bibliotecile dinamice folosite de un executabil prin intermediul
8282
linux-gate.so.1 (0xf7f97000)
8383
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7d8a000)
8484
/lib/ld-linux.so.2 (0xf7f98000)
85-
```
85+
``
8686

8787
În rezultatul de mai sus, observăm că executabilul folosește biblioteca standard C, localizată la calea `/lib/i386-linux-gnu/libc.so.6`.
8888
`/lib/ld-linux.so.2` este loaderul / linkerul dinamic.
@@ -170,7 +170,7 @@ La fel, biblioteca `libinc.so` nu este găsită.
170170
Motivul este că nu am precizat loaderului unde să caute biblioteca partajată.
171171
Loaderul are definită calea unde să caute biblioteca standard C (`/lib/i386-linux-gnu/libc.so.6`), dar nu deține informații despre `libinc.so`.
172172

173-
Ca să precizăm loaderului calea către bibliotecă, o cale simplă, de test, este folosirea variabilei de mediu `LD_LIBRARY_PATH`, pe care o inițializăm la directorul curent (`.` - *dot*).
173+
Ca să precizăm loaderului calea către bibliotecă, o cale simplă, de test, este folosirea variabilei de mediu `LD_LIBRARY_PATH`, pe care o inițializăm la directorul curent (`. ` - *dot*).
174174
Odată folosită variabila de mediu `LD_LIBRARY_PATH`, lansarea în execuție a executabilului va funcționa, la fel și folosirea `ldd`:
175175

176176
```console
@@ -186,4 +186,4 @@ num_items: 1
186186

187187
Variabila de mediu `LD_LIBRARY_PATH` pentru loader este echivalentul opțiunii `-L` în comanda de linkare: precizează directoarele în care să fie căutate biblioteci pentru a fi încărcate, respectiv linkate.
188188
Folosirea variabilei de mediu `LD_LIBRARY_PATH` este recomandată pentru teste.
189-
Pentru o folosire robustă, există alte mijloace de precizare a căilor de căutare a bibliotecilor partajate, documentate în (pagina de manual a loaderului / linkerului dinamic)(https://man7.org/linux/man-pages/man8/ld.so.8.html#DESCRIPTION).
189+
Pentru o folosire robustă, există alte mijloace de precizare a căilor de căutare a bibliotecilor partajate, documentate în [pagina de manual a loaderului / linkerului dinamic](https://man7.org/linux/man-pages/man8/ld.so.8.html#DESCRIPTION).

helloworld.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
```C
2+
#include <stdio.h>
3+
4+
int main(void)
5+
{
6+
puts("Hello, World!");
7+
return 0;
8+
}
9+
```
10+
```C++
11+
#include <iostream>
12+
13+
int main()
14+
{
15+
std::cout << "Hello, World!" << std::endl;
16+
return 0;
17+
}
18+
```
19+
```D
20+
import std.stdio;
21+
22+
void main()
23+
{
24+
writeln("Hello, World!");
25+
}
26+
```

0 commit comments

Comments
 (0)