Outils pour utilisateurs

Outils du site


tuto:linux:tuto_compilation

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
tuto:linux:tuto_compilation [2013/06/05 20:38] – créée roottuto:linux:tuto_compilation [2013/06/08 17:19] (Version actuelle) – [Exemples] root
Ligne 6: Ligne 6:
   * **CC** : Compilateur C (gcc, icc...)   * **CC** : Compilateur C (gcc, icc...)
   * **CXX** : Idem que CC mais pour le C++ (export CXX=$CC)   * **CXX** : Idem que CC mais pour le C++ (export CXX=$CC)
-    * **CFLAGS** : Ce paramétrage a en général pour but d'optimiser ou déboguer le code C (CFLAGS=" -march=native -mtune=native -O3 -pipe"+  * **CFLAGS** : Ce paramétrage a en général pour but d'optimiser ou déboguer le code C (CFLAGS=" -march=native -mtune=native -O3 -pipe"
-    * **CXXFLAGS** : Idem pour le C++ (export CXXFLAGS=$CFLAGS) +  * **CXXFLAGS** : Idem pour le C++ (export CXXFLAGS=$CFLAGS) 
-    * **LDFLAGS** : Permet de préciser les répertoires où se trouvent les librairies (*.so) et include(*.h) (LDFLAGS=" -I/home/include -L/home/lib -lX11")+  * **LDFLAGS** : Permet de préciser les répertoires où se trouvent les librairies (*.so) et include(*.h) (LDFLAGS=" -I/home/include -L/home/lib -lX11")
  
   ./configure CC=gcc CFLAGS=-O3 LDFLAGS=-lposix   ./configure CC=gcc CFLAGS=-O3 LDFLAGS=-lposix
Ligne 45: Ligne 45:
 Prenons une exemple tout bête, fichier qui affiche tu texte via 2 fonctions incluses dans 2 librairies différentes. Prenons une exemple tout bête, fichier qui affiche tu texte via 2 fonctions incluses dans 2 librairies différentes.
  
-* Librairie //boo.c// :+  * Librairie //boo.c// :
 <code c boo.c> <code c boo.c>
 #include <stdio.h> #include <stdio.h>
Ligne 99: Ligne 99:
  
  
- * Compilation en shared :+  * Compilation en shared :
  
 <code bash compile1.sh> <code bash compile1.sh>
Ligne 133: Ligne 133:
  
  
- * Compilation en shared avec la librairie boo directement inclue en statique dans le binaire :+  * Compilation en shared avec la librairie boo directement inclue en statique dans le binaire (noter l'utilisation du binaire ar pour obtenir un fichier archive .a à partir d'une librairie.so) :
  
 <code bash compile2.sh> <code bash compile2.sh>
Ligne 262: Ligne 262:
          n'est pas un exécutable dynamique          n'est pas un exécutable dynamique
 </code> </code>
 +
 +  * Include les 2 librairies dans une seule :
 +
 +<code c compile6.sh>
 +#!/bin/bash
 +
 +gcc -c -Wall -Werror -fpic foo.c
 +
 +gcc -c -Wall -Werror -fpic boo.c
 +gcc -shared -o libgigix.so boo.o foo.o
 +
 +gcc -L. -Wall -o test main.c -lgigix
 +
 +export LD_LIBRARY_PATH=/root/compile
 +./test
 +
 +ldd test
 +</code>
 +
 +<code>
 +root@ks305337:~/compile# ./6.sh 
 +This is a shared library test...
 +Hello, I'm a shared library : foo
 +Hello, I'm a shared library : boo
 +        linux-vdso.so.1 =>  (0x00007fff2e7fe000)
 +        libgigix.so => /root/compile/libgigix.so (0x00007fcd2fd37000)
 +        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcd2f9a3000)
 +        /lib64/ld-linux-x86-64.so.2 (0x00007fcd2ff3a000)
 +</code>
 +
 +=== Compilation statique ===
 +
 +
 +Pour compiler un programme en static (par exemple python) :
 +<code>
 +./configure LDFLAGS=" -static  -Wl,-static" CFLAGS=" -static-libgcc -static -march=native -mtune=native -O3 -pipe -fPIC" CC=gcc-4.8 --enable-shared=no
 +</code>
 +
 +
 +
 +Pour transformer un binaire dynamique en statique, il existe des outils comme :
 +  * [[http://sourceforge.net/projects/statifier/files/|ELF Statifier]] : mini [[http://archive09.linux.com/feature/150677|tuto]]. 
 +  * [[http://www.magicermine.com/trial.html|Ermine]] : mini [[http://nathanaaron.wordpress.com/2011/08/31/building-a-portable-executable-on-linux/|tuto]]
tuto/linux/tuto_compilation.1370464682.txt.gz · Dernière modification : 2013/06/05 20:38 de root