# [GENTOO] Créer un binaire statique

## Ascodas

Salut,

Toujours dans la recheche de logiciel me facilitant la vie avec l'interfacage linux/iphone sans jailbreak, j'ai trouvé un logiciel d'encodage video pour iphone assez performant (j'avoue que les qques scripts de conversions trouvés sur le net ne m'ont pas du tout convaincu), il s'agit de Handbrake et au miracle un ebuild est dispo sur bugs.gentoo.

Tout se compile et marche parfaitement, et j'aimerais figer la situation concernant ce logiciel en créant un binaire avec les librairies en statique (même si c lourd) pour ne pas avoir un jour de mauvaise surprise.

Il n'y a pas de use static dispo et il ne semble pas y avoir de possibilité avec quickpkg ?

Merci de me dire si c'est possible ou si je me trompe carrement.

+

----------

## kernelsensei

Salut,

je crois qu'il suffit de rajouter un cflag -static

Tu peux l'activer uniquement pour handbrake en mettant une variable CFLAGS personnalisée dans le fichier /etc/portage/env/<categorie>/handbrake

----------

## Ascodas

Merci pour ta réponse j'ai en effet avec ces éléments trouvé qquechose qui allait dans ce sens.

donc :

```

[thomas@corei7 portage]$ cd env/media-video/

[thomas@corei7 media-video]$ pwd

/etc/portage/env/media-video

[thomas@corei7 media-video]$ cat handbrake 

CFLAGS="-static"

CXXFLAGS="${CFLAGS}"

[thomas@corei7 media-video]$ 
```

Je relance le merge de handbrake sans grand changement et le package binaire que je crée après n'augmente pas en taille donc je suppose que ca ne fonctionne pas comme attendu, je me demande si le flag static fonctionne.

----------

## Leander256

Salut,

Il existe un moyen très simple de vérifier que ton binaire est compilé en statique, la commande ldd:

```
$ gcc pouet.c -static -o pouet

$ ldd pouet

   not a dynamic executable

```

Le problème (si il y en a un) vient probablement du fait que le Makefile de ce programme n'utilise pas gcc pour éditer les liens du binaire mais invoque directement ld. Essaye donc en rajoutant cette ligne dans ton fichier handbrake:

```
LDFLAGS="-static"
```

----------

## Ascodas

Ok  merci pour le commande ldd et ca confirme bien que ce n'est pas compilé en statique.

Par contre avec ton option LDFLAGS="-static" la compilation plante.

```
(.text+0xd7): undefined reference to `dlopen'

/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/../../../../lib64/libSDL.a(SDL_sysloadso.o): In function `SDL_LoadObject':

(.text+0xdf): undefined reference to `dlerror'

/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/../../../../lib64/libSDL.a(SDL_sysloadso.o): In function `SDL_UnloadObject':

(.text+0x6): undefined reference to `dlclose'

collect2: ld a retourné 1 code d'état d'exécution

make[1]: *** [ffplay_g] Erreur 1

make[1]: quittant le répertoire « /var/tmp/portage/media-video/handbrake-0.9.4/work/HandBrake-0.9.4/build/contrib/ffmpeg/ffmpeg-r19067 »

make: *** [contrib/ffmpeg/.stamp.build] Erreur 2

make: quittant le répertoire « /var/tmp/portage/media-video/handbrake-0.9.4/work/HandBrake-0.9.4/build »

 * 

 * ERROR: media-video/handbrake-0.9.4 failed.

 * Call stack:

 *               ebuild.sh, line   49:  Called src_compile

 *             environment, line  321:  Called die

 * The specific snippet of code:

 *       emake -C build || die "failed compiling ${PN}"

 *  The die message:

 *   failed compiling handbrake

 * 

 * If you need support, post the topmost build error, and the call stack if relevant.

 * A complete build log is located at '/var/tmp/portage/media-video/handbrake-0.9.4/temp/build.log'.

 * The ebuild environment file is located at '/var/tmp/portage/media-video/handbrake-0.9.4/temp/environment'.

 * 

>>> Failed to emerge media-video/handbrake-0.9.4, Log file:

>>>  '/var/tmp/portage/media-video/handbrake-0.9.4/temp/build.log'

 * Messages for package media-video/handbrake-0.9.4:

 * 

 * ERROR: media-video/handbrake-0.9.4 failed.

 * Call stack:

 *               ebuild.sh, line   49:  Called src_compile

 *             environment, line  321:  Called die

 * The specific snippet of code:

 *       emake -C build || die "failed compiling ${PN}"

 *  The die message:

 *   failed compiling handbrake

 * 

 * If you need support, post the topmost build error, and the call stack if relevant.

 * A complete build log is located at '/var/tmp/portage/media-video/handbrake-0.9.4/temp/build.log'.

 * The ebuild environment file is located at '/var/tmp/portage/media-video/handbrake-0.9.4/temp/environment'.

 * 

[root@corei7 ~]$ 
```

Merci.

----------

## Leander256

Apparemment ce n'est pas gagné, cf ce thread:

http://www.linux-archive.org/gentoo-user/294715-building-static-libraries.html

Il me semble qu'on avait eu une discussion sur ce genre de problème dans le forum il y a très longtemps, cela vient du fait que certaines bibliothèques (libSDL dans ton cas) sont conçues pour charger à la volée d'autres bibliothèques, tu ne peux donc pas avoir une version statique.

Je ne vais pas répéter bêtement tout ce qui est dit dans le lien, je pense qu'il y a des gens versés dans ce genre de manipulations sur le forum qui te feront une réponse plus complète (et plus pertinente).

----------

## Ascodas

Ok ben merci pour tous ces renseignements, je me coucherais moins bête.

----------

