Differences

This shows you the differences between two versions of the page.

Link to this comparison view

uso:laboratoare:ac:laborator-06:make-intro [2020/11/10 09:06]
127.0.0.1 external edit
uso:laboratoare:ac:laborator-06:make-intro [2021/11/10 21:56] (current)
andrei.tivga
Line 1: Line 1:
 ====== Compilarea unui fișier cod sursă C ====== ====== Compilarea unui fișier cod sursă C ======
  
-În această secțiune urmărim să învățăm pașii pentru a compila un program, adică a-l aduce de la cod sursă la executabil. Pentru aceasta vom crea un program care verifică dacă un număr citit de la tastatură este prim sau nu. Vom scrie într-un nou fișier programul care implementează algoritmulvom compila codul sursă folosind [[https://​gcc.gnu.org|compilatorul GCC]] și vom testa că programul funcționează.+În această secțiune urmărim să învățăm pașii pentru a compila un program, adică a-l aduce de la cod sursă la executabil. Pentru aceasta vom crea un program care verifică dacă un număr citit de la tastatură este prim sau nu. 
 + 
 +Pașii pe care îi vom face sunt:  
 +  * vom scrie într-un nou fișier ​cu extensia .c programul care implementează algoritmul 
 +  * vom compila codul sursă folosind [[https://​gcc.gnu.org|compilatorul GCC]] 
 +  * vom testa că programul funcționează.
  
 ===== Crearea unui fișier cod sursă ===== ===== Crearea unui fișier cod sursă =====
Line 14: Line 19:
     int i;     int i;
  
-    for (i = 2; i <n / 2; i++) {+    for (i = 2; i < n / 2; i++) {
         if (n % i == 0) {         if (n % i == 0) {
             return 0;             return 0;
Line 39: Line 44:
 } }
 </​code>​ </​code>​
-{{:uso:​laboratoare:​laborator-04:​create-is-prime.gif?500|}}+{{:gifs/create-is-prime.gif}}
  
 Mai multe detalii despre folosirea editorului de text ''​%%nano%%''​ găsim în capitolul //Lucrul cu fișiere//. Mai multe detalii despre folosirea editorului de text ''​%%nano%%''​ găsim în capitolul //Lucrul cu fișiere//.
Line 45: Line 50:
 ===== Compilarea codului sursă în executabilul a.out ===== ===== Compilarea codului sursă în executabilul a.out =====
  
-Avem fișierul cod sursă ''​%%is-prime.c%%''​ și vrem să obținem un program pe care să-l rulăm pe sistemul nostru. Pentru aceasta, trebuie să compilăm fișierul ''​%%is-prime.c%%''​. Acest program este de fapt un **executabil** (//​binar//​). Executabilele sunt fișiere care conțin instrucțiuni pe care sistemul de calcul le poate interpreta și rula.+Avem fișierul cod sursă ''​%%is-prime.c%%''​ și vrem să obținem un program pe care să-l rulăm pe sistemul nostru. Pentru aceasta, trebuie să compilăm fișierul ''​%%is-prime.c%%''​. Acest program este de fapt un **executabil** (//fișier ​binar//). Executabilele sunt fișiere care conțin instrucțiuni pe care sistemul de calcul le poate interpreta și rula.
  
-Creăm un executabil din fișierul ''​%%is-prime.c%%''​ folosind comanda ''​%%gcc%%'':​+Creăm un executabil din fișierul ''​%%is-prime.c%%''​ folosind comanda ''​%%gcc%%'': ​Astfel invocăm compilatorul GCC(GNU Compiler Collection) instalat anterior și îi dăm ca argument numele fișierului dorit.
  
 <code bash> <code bash>
Line 56: Line 61:
 -rw-r--r-- 1 student student ​ 406 Oct 26 06:17 is-prime.c -rw-r--r-- 1 student student ​ 406 Oct 26 06:17 is-prime.c
 </​code>​ </​code>​
-Așa cum vedem în rezultatul rulări comenzii ''​%%ls -l%%''​ de mai sus, executabilul se numește ''​%%a.out%%''​. Acesta este numele implicit dat de GCC. Adică ''​%%a.out%%''​ va fi numele tuturor fișierelor executabile generate cu GCC, indiferent de fișierul cod sursă. ​Verificăm că fișierul ''​%%a.out%%''​ este într-adevăr un fișier executabil:​ +Așa cum vedem în rezultatul rulări comenzii ''​%%ls -l%%''​ de mai sus, executabilul se numește ''​%%a.out%%''​. Acesta este numele ​**implicit** dat de GCC. Adică ''​%%a.out%%''​ va fi numele tuturor fișierelor executabile generate cu GCC, indiferent de fișierul cod sursă. Rulăm executabilul ''​%%a.out%%''​ în felul următor și introducem de la tastatură un număr:
- +
-<code bash> +
-student@uso:​~$ file a.out  +
-a.out: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=14553360a84b6dbe4dba5f287a665047572bde7f,​ not stripped +
-</​code>​ +
-Acronimele **ELF** (//​Executable and Linkable Format) șiLSB//* (//Linux Standard Base//) nu sunt relevante în această carte, dar reținem că atunci când vedem un fișier **ELF**, acesta este un fișier //​executabil//​. +
- +
-Rulăm executabilul ''​%%a.out%%''​ în felul următor și introducem de la tastatură un număr:+
  
 <code bash> <code bash>
Line 86: Line 83:
 -rwxr-xr-x 1 student student 8448 Oct 26 06:57 is-prime -rwxr-xr-x 1 student student 8448 Oct 26 06:57 is-prime
 -rw-r--r-- 1 student student ​ 406 Oct 26 06:17 is-prime.c -rw-r--r-- 1 student student ​ 406 Oct 26 06:17 is-prime.c
-student@uso:​~$ file is-prime +
-is-prime: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=14553360a84b6dbe4dba5f287a665047572bde7f,​ not stripped+
 </​code>​ </​code>​
 Opțiunea ''​%%-o%%''​ urmată de numele ales pentru program (''​%%is-prime%%''​) transmite compilatorului ca programul să se numească ''​%%is-prime%%'',​ și nu ''​%%a.out%%''​. Rulăm executabilul ''​%%is-prime%%''​ în felul următor și introducem de la tastatură un număr: Opțiunea ''​%%-o%%''​ urmată de numele ales pentru program (''​%%is-prime%%''​) transmite compilatorului ca programul să se numească ''​%%is-prime%%'',​ și nu ''​%%a.out%%''​. Rulăm executabilul ''​%%is-prime%%''​ în felul următor și introducem de la tastatură un număr:
Line 107: Line 103:
 { {
     int new_n = 0;     int new_n = 0;
-    int old_n = n;+    int original_n ​= n;
  
     while (n > 0) {     while (n > 0) {
Line 115: Line 111:
     }     }
  
-    return (new_n == old_n) ? 1 : 0;+    return (new_n == original_n) ? 1 : 0;
 } }
  
Line 126: Line 122:
  
     if (check_if_palindrome(n)) {     if (check_if_palindrome(n)) {
-        printf("​%d is a palindome\n", n);+        printf("​%d is a palindrome\n", n);
     } else {     } else {
         printf("​%d is not a palindrome\n",​ n);         printf("​%d is not a palindrome\n",​ n);
Line 136: Line 132:
   - Compilați fișierul ''​%%is-palindrome.c%%''​ într-un executabil cu numele ''​%%a.out%%''​ folosind ''​%%gcc%%''​. Verificați funcționalitatea programului.   - Compilați fișierul ''​%%is-palindrome.c%%''​ într-un executabil cu numele ''​%%a.out%%''​ folosind ''​%%gcc%%''​. Verificați funcționalitatea programului.
   - Compilați fișierul ''​%%is-palindrome.c%%''​ într-un executabil cu numele ''​%%is-palindrome%%''​ folosind ''​%%gcc%%''​. Verificați funcționalitatea programului.   - Compilați fișierul ''​%%is-palindrome.c%%''​ într-un executabil cu numele ''​%%is-palindrome%%''​ folosind ''​%%gcc%%''​. Verificați funcționalitatea programului.
 +
  
uso/laboratoare/ac/laborator-06/make-intro.1604991981.txt.gz · Last modified: 2021/11/10 21:56 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0