Costruzione di applicazioni Compilazione Loading (linking) Esecuzione su Linux.
-
Upload
enrica-grande -
Category
Documents
-
view
214 -
download
0
Transcript of Costruzione di applicazioni Compilazione Loading (linking) Esecuzione su Linux.
![Page 1: Costruzione di applicazioni Compilazione Loading (linking) Esecuzione su Linux.](https://reader036.fdocumenti.com/reader036/viewer/2022082702/5542eb66497959361e8d27a7/html5/thumbnails/1.jpg)
Costruzione di applicazioniCostruzione di applicazioni
• Compilazione
• Loading (linking)
• Esecuzione
su Linux
![Page 2: Costruzione di applicazioni Compilazione Loading (linking) Esecuzione su Linux.](https://reader036.fdocumenti.com/reader036/viewer/2022082702/5542eb66497959361e8d27a7/html5/thumbnails/2.jpg)
Programmi sempliciProgrammi semplici
• Per compilare e linkare programmi semplici:
c++ mytest.cpp
L’eseguibile sarà a.out (./a.out)
• Per cambiare il nome dell’eseguibile:
c++ -o mytest mytest.cpp• Per vedere quello che fa il compilatore:
c++ -v mytest.cpp
![Page 3: Costruzione di applicazioni Compilazione Loading (linking) Esecuzione su Linux.](https://reader036.fdocumenti.com/reader036/viewer/2022082702/5542eb66497959361e8d27a7/html5/thumbnails/3.jpg)
Uso di librerie esterneUso di librerie esterne
• Per compilare e linkare usando librerie esterne:
c++ -Iheader_dir -Llib_dir \
-llib_name mytest.cpp• N.B. lib_name senza il prefisso lib e il
suffisso .a o .so
![Page 4: Costruzione di applicazioni Compilazione Loading (linking) Esecuzione su Linux.](https://reader036.fdocumenti.com/reader036/viewer/2022082702/5542eb66497959361e8d27a7/html5/thumbnails/4.jpg)
Esempio: uso di CLHEPEsempio: uso di CLHEP
• CLHEP è un pacchetto sviluppato a SLAC con classi utili per HEP
• Header files in: /cern/CLHEP/include• Libreria (libclhep.a) in: /cern/CLHEP/lib
c++ -I/cern/CLHEP/include \ -L/cern/CLHEP/lib -lclhep \ mytest.cpp
![Page 5: Costruzione di applicazioni Compilazione Loading (linking) Esecuzione su Linux.](https://reader036.fdocumenti.com/reader036/viewer/2022082702/5542eb66497959361e8d27a7/html5/thumbnails/5.jpg)
Programmi più complessiProgrammi più complessi
• Se si hanno più files da compilare e linkare:– compilazione senza load dei singoli files:
c++ -c a.cc -o a.o
c++ -c b.cc -o b.o– load di tutti i files:
c++ mytest.cpp a.o b.o
![Page 6: Costruzione di applicazioni Compilazione Loading (linking) Esecuzione su Linux.](https://reader036.fdocumenti.com/reader036/viewer/2022082702/5542eb66497959361e8d27a7/html5/thumbnails/6.jpg)
Produzione di una libreriaProduzione di una libreria
• Meglio:– compilazione senza load dei singoli files:
c++ -fPIC -c a.cc -o a.o
c++ -fPIC -c b.cc -o b.o– creazione di una shared library:
c++ -shared -o libmylib.so \
a.o b.o– creazione di una archive library:
ar -r libmylib.a a.o b.o
![Page 7: Costruzione di applicazioni Compilazione Loading (linking) Esecuzione su Linux.](https://reader036.fdocumenti.com/reader036/viewer/2022082702/5542eb66497959361e8d27a7/html5/thumbnails/7.jpg)
Uso di shared librariesUso di shared libraries
• E’ necessario definire una variabile ambientale LD_LOAD_PATH che contenga il nome della directory in cui si trova la libreria prima di eseguire il programma
• Alternativamente si può compilare con C++ aggiungendo l’opzione:
-Wl,-rpath lib_dir -Llib_dir\
-llibname
![Page 8: Costruzione di applicazioni Compilazione Loading (linking) Esecuzione su Linux.](https://reader036.fdocumenti.com/reader036/viewer/2022082702/5542eb66497959361e8d27a7/html5/thumbnails/8.jpg)
Uso di MakefileUso di Makefile
• L’uso del comando make con un Makefile semplifica molto la vita in caso di pacchetti complessi!