Compilare più file C in un unico eseguibile

mirawara

Nuovo Utente
136
8
CPU
Ryzen 7 5800x
Dissipatore
Arctic AIO A-RGB 240
Scheda Madre
Asus ROG B550-F Gaming Wi-Fi
RAM
2x8 GB Crucial Ballistix 3600 MHz CL16
GPU
AMD Radeon 6700 XT Stock
Monitor
Omen 25" FHD 144Hz TN
PSU
Antec HCG 850W
Case
Corsair 5000D
OS
Windows 11
Salve,

Ho tre file.c:
1)parte1.c (contiene il main)

2)parte2.c (contiene la "funzione 2" che utilizza "funzione 1")

3)parte3.c (contiene la "funzione3" che utilizza "funzione2")

E infine una libreria (libprova.a) che contiene la funzione1.

Con GCC dal terminale come posso compilare tutto insieme in un unico eseguibile?

In poche parole devo compilare parte1.c in modo che mi riconosca le funzioni negli altri file+libreria.

Grazie in anticipo.
 

Moffetta88

Moderatore
Staff Forum
Utente Èlite
20,543
12,929
CPU
i5-4690
Dissipatore
DEEPCOOL CAPTAIN 240EX
Scheda Madre
MSI Z97 U3 PLUS
HDD
KINGSTON SSD KC400 240GB
RAM
24GB BALLISTIX SPORT @2133MHz
GPU
STRIX GTX980 DC2OC
Audio
INTEGRATA
Monitor
AOC G2590VXQ
PSU
BEQUIET! System Power 7 500W
Case
DEEPCOOL MATREXX 55
Periferiche
NESSUNA
Net
EOLO 100
OS
UBUNTU/WINDOWS11
In modo easy fai così gcc file1.c file2.c file_lib.h -o eseguibile
 

mirawara

Nuovo Utente
136
8
CPU
Ryzen 7 5800x
Dissipatore
Arctic AIO A-RGB 240
Scheda Madre
Asus ROG B550-F Gaming Wi-Fi
RAM
2x8 GB Crucial Ballistix 3600 MHz CL16
GPU
AMD Radeon 6700 XT Stock
Monitor
Omen 25" FHD 144Hz TN
PSU
Antec HCG 850W
Case
Corsair 5000D
OS
Windows 11
In modo easy fai così gcc file1.c file2.c file_lib.h -o eseguibile
Non funziona purtroppo... O meglio funziona ma non mi riconosce le funzioni. Inoltre la libreria è un archivio.a.

Ho provato di tutto. Anche con -L. -lprova, sia partendo dai file .c che dai file oggetto .o.

In qualche modo si deve fare necessariamente fare perché è una specie di esercizio che altri hanno risolto (non so come).

P.S. Grazie della risposta.
 

Moffetta88

Moderatore
Staff Forum
Utente Èlite
20,543
12,929
CPU
i5-4690
Dissipatore
DEEPCOOL CAPTAIN 240EX
Scheda Madre
MSI Z97 U3 PLUS
HDD
KINGSTON SSD KC400 240GB
RAM
24GB BALLISTIX SPORT @2133MHz
GPU
STRIX GTX980 DC2OC
Audio
INTEGRATA
Monitor
AOC G2590VXQ
PSU
BEQUIET! System Power 7 500W
Case
DEEPCOOL MATREXX 55
Periferiche
NESSUNA
Net
EOLO 100
OS
UBUNTU/WINDOWS11
No, devi fare allora -l:libreria.a ( è una L minuscola ). Ti sei perso il : tra -l ed il nome del file
 

mirawara

Nuovo Utente
136
8
CPU
Ryzen 7 5800x
Dissipatore
Arctic AIO A-RGB 240
Scheda Madre
Asus ROG B550-F Gaming Wi-Fi
RAM
2x8 GB Crucial Ballistix 3600 MHz CL16
GPU
AMD Radeon 6700 XT Stock
Monitor
Omen 25" FHD 144Hz TN
PSU
Antec HCG 850W
Case
Corsair 5000D
OS
Windows 11
No, devi fare allora -l:libreria.a ( è una L minuscola ). Ti sei perso il : tra -l ed il nome del file
Non va ugualmente... Se vuoi ti mando i file e ci provi. Che ne dici?
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Visto che la lib è statica devi usare anche -static.

Tu avrai qualcosa tipo:
Codice:
gcc -static file1.c file2.c file3.c -llibprova

Se devi specificare il percorso la L deve essere maiuscola.

Puoi anche dare un occhio a questo Consulta questa pagina https://www.rapidtables.com/code/linux/gcc/gcc-l.html
 
  • Mi piace
Reazioni: Moffetta88
U

Utente cancellato 371741

Ospite
se libprova si trova in /usr/lib

Codice:
gcc -c file1.c
gcc -c file2.c
gcc -c file3.c

gcc file1.o file2.o file3.o -lprova -o tuoelf

(nota., quando si linka con un libreria il cui nome inizia per "lib", i.e. librova, lib si omette, cioe' si usa -lprova)

se la tua libprova.a si trova nella stessa directory in cui si trovano i .o, allora basta aggiungerla:

Codice:
gcc file1.o file2.o file3.o libprova.a -o tuoelf
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!