diff --git a/dynamic-linking.ro.md b/dynamic-linking.ro.md index 3630d63..a2d42c3 100644 --- a/dynamic-linking.ro.md +++ b/dynamic-linking.ro.md @@ -39,7 +39,7 @@ main: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically link [..]/06-dynamic$ file ../05-static/main ../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 -`` +``` Fișierul executabil `main` obținut prin linkare dinamică are un comportament identic fișierului executabil `main` obținut prin linkare statică. Observăm că dimensiunea sa este mult mai redusă: ocupă `7 KB` comparativ cu `600 KB` cât avea varianta sa statică. @@ -66,7 +66,7 @@ Investigăm simbolurile executabilului: Simbolurile obținute din modulul obiect `main.o` și din biblioteca statică `libinc.o` sunt rezolvate și au adrese stabilite. Observăm că folosirea bibliotecii standard C a dus la existența simboblului `_start`, care este entry pointul programului. -Dar, simbolurile din biblioteca standard C, (`printf`, __libc_start_main`) sunt marcate ca nedefinite (`U`). +Dar, simbolurile din biblioteca standard C, (`printf`, __libc_start_main) `sunt marcate ca nedefinite `(U). Aceste simboluri nu sunt prezente în executabil: rezolvarea, stabilirea adreselor și relocarea lor se va realiza mai târziu, la încărcare (load time). La încărcare, o altă componentă software a sistemului, loaderul / linkerul dinamic, se va ocupa de: @@ -77,7 +77,7 @@ La încărcare, o altă componentă software a sistemului, loaderul / linkerul d Putem investiga bibliotecile dinamice folosite de un executabil prin intermediul utilitarului `ldd`: -``console +```console [..]/06-dynamic$ ldd main linux-gate.so.1 (0xf7f97000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7d8a000) @@ -186,4 +186,4 @@ num_items: 1 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. Folosirea variabilei de mediu `LD_LIBRARY_PATH` este recomandată pentru teste. -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). +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). diff --git a/helloworld.md b/helloworld.md new file mode 100644 index 0000000..58b7fe8 --- /dev/null +++ b/helloworld.md @@ -0,0 +1,37 @@ + + +![Poza](./helloworld.png) +# C +```C + #include + int main(void) + { + puts("Hello, World!"); + return 0; + } +``` + +#### Build with: +___ + `gcc -Wall -o helloworld helloworld.c` + +#### Run with: + `./helloworld` + +# C++ +```C++ + #include + int main() + { + std::cout << "Hello, World!" << std::endl; + return 0; + } +``` +# Header1 +## Header 2 +### Header 3 +#### Build with: + `gcc -Wall -o helloworld helloworld.c` + +#### Run with: + `./helloworld` \ No newline at end of file