# [compilation] C compiler cannot create executable (résolu)

## corto maltese

Bonjour a tous !

Je me suis llancé sur la gentoo et sur ses forum et malgre tous mes efforts je n'arrive pas a compiler avec emerge genkernel, j'ai un message d'erreur du type :

C compiler cannot create executable 

J'ai bien essayé de modifier make.conf mais sans succes 

merci pour votre aide !

AlexandreLast edited by corto maltese on Mon Jun 07, 2004 1:49 pm; edited 1 time in total

----------

## kwenspc

peus tu donner exactement ce que gcc te donne comme erreur s'il te plait, ça me fait vaguement penser à quelque chose...

----------

## PrEdAt0r

..... c'est bizarre car normalement gcc est prévu pour ! et sinon oubli genkernel et fais le a la main, tu aura bcp plus de performance avec un taux d'erreur au boot bcp moin important !

----------

## fafounet

J´ai compile mon premier kernel avec genkernel ( je n´y connaissais vraiment rien a Linux) et je n´ai pas eu de problemes

----------

## PrEdAt0r

oui c'est sur que si tu ny connet vraiment rien genkernel est bien au debut , mais la meilleure façon de s'apprendre quelque chose est de commencer et essayer de le faire tout seul(pour les option kernel avec menuconfig car la seul toi conné ta machine) , par exemple moi il y a 2 semaine je ne my connaissait pas trop en compil de kernel et je l'ai fai a la main et la tout va nickel !

----------

## corto maltese

merci c cool de repondre aussi vite !

c la premiere fois que je compile le noyau, mais j'ai aussi essaye avec make menuconfig et ca na pas marche non plus.

Voisci le message d'erreur :

checking for c compiler default output ... configure : error : c compiler cannot create executable

check config.log for details

make: *** unix-def.mk error 77

!!! ERROR media-libs/freetype 2.1.5 -r1 failed

function src-compile, Line 41, exit code 2

!!! (no error message)

----------

## kernelsensei

desactive ccache et distcc si ces derniers sont actives ... et re-tente !

sinon, donne la sortie de gcc --version et emerge info

----------

## kwenspc

euh attend Predator je sais pas ce que tu racontes mais genkernel : c JUSTE un front end aux commandes qu'on tape habituellement à la main c'est tout. derrière il se passe exactement la même chose...donc si t'as des erreurs ça vient uniquement de toi   :Razz:   (bon ça m'arrive aussi d'en avoir hein!)

corto_maltese : essais de faire la séquence de commandes suivantes 

```

(en root bien sûr)

ldconfig

source /etc/profile

env-update

```

je ne sais pas exactement si tu as le même problème j'ai eu récemment mais je ne pouvais rien compiler   :Sad: 

c'est justement le plantage de genkernel qui m'a mis la puce à l'oreille

ces trois commande ont rétablis un peu d'ordre afin que je puisse me faire un bô emerge -u world ce qui a résolut le problème (note : j'avais pas mis ma bécane à jour depuis 8 mois...)

le problème était que gcc n'arrivait pas à savoir pour quel machine il compilait et, enfin bref il semblait ne savoir pu rien faire. et tout plantait allègrement comme ça...

je ne sais pas si ton problème est lié à celui que j'ai eu donc je te garantis pas que ça fonctionne malheureusement car j'ai jamais vraiment bien compris ce qu'il s'était passé

----------

## corto maltese

kwenspc j'ai essaye ldconfig source... et env- update ca ne marche pas 

kernel-sensei pourrait tu etre plus explicite je ne comprends pas ce que tu veux dire par desactiver cdcache et dist...

ca commence a me rendre fou cette histoire   :Shocked: 

----------

## kernelsensei

edite (vim,nano,emacs,...) /etc/make.conf et matte du coté de la variable FEATURES, si ya distcc ou ccache, vires les !

donne moi aussi la version de gcc:

```
gcc --version
```

----------

## corto maltese

gcc --version

gcc 3.3.2 20031218 (gentoo linux 3.3.2 r 5 propolis 3.3.7)

et je n'ai pas de variable FEATURES

----------

## kernelsensei

donnes nous carrement la sortie de :

```
emerge info
```

----------

## corto maltese

emerge info

portage 2.0.5r5 (default -x86-2004.0, gcc 3.3.2, glibc2.3.2-r9 2.4.25 gentoo)

==============================================================

System uname  : 2.4.25 gentoo i686 amd duron processor

gentoo base system version 1.4.3.13

autoconf : sys-devel autoconf 2.58r1

automake : sys-devel/automake 1.8.3

ACCEPT-KEYWORD='X86'

AUTOCLEAN = yes

CFLAGS = ' -O2 -mcpu=i686 -formit-frame-pointer'

CHOST = " i386-pc-linux-gnu"

COMPILER = "gcc3"

CONFIG PROTECT = " /etc /usr/kde/2/share/config /usr/kde/3/share/config /usr/share/config /var/qmail/control "

CONFIG_PROTECT_MASK = " /etc/gconf /etc/termininfo /etc/env.d"

CXXFLAGS = " -O2 -mcpu= i686 -formit-frame-pointer"

DISTDIR = "/usr/portage/distfiles"

FEATURES = "autoaddcvs ccache sandbox"

GENTOO_MIRRORS...

MAKEOPTS = "-j2"

PKGDIR " /usr/portage/packages"

PORTAGE_TMPDIR = "/var/tmp"

PORTDIR = "/usr/portage"

PORTDIR_OVERLAY == ""

SYNC= "rsync : //rsync.gentoo.org/gentoo-portage"

USE = "X apm avi berkdb crypt cups encode gdbm gif gnome gpm ....

PS : dans quel fichier edite-t-on la variable FEATURES ??

----------

## kernelsensei

FEATURES = "autoaddcvs ccache sandbox" 

dans /etc/make.conf

vires ccache !

CFLAGS = ' -O2 -mcpu=i686 -formit-frame-pointer'

CHOST = " i386-pc-linux-gnu" 

Petite incohérence non ?

ACCEPT-KEYWORD='X86' 

T'as recopié la sortie a la main ou quoi ? car la franchement ca colle pas !

ca serait plutot :

ACCEPT_KEYWORDS="x86"

----------

## corto maltese

oui j'ai recopié le fichier a la main

bon

sinon j'ai viré ccache

j'ai tout mis en i386

et ca mache pas !

----------

## kwenspc

nan justement met CHOST en 686...enfin a priori tu as dû installer un système fait pour les CPU type i686 non? 

fais un :

gcc-config  i686-pc-linux-gnu-3.3.2

et vérifies que cette commande te donnes pas d'erreur...

à ma connaissance pour ACCEPT_KEYWORDS c'est "~x86" qu'il faut mettre... oublis pas le "~"

et c'est un "_" entre accept et keywords 

enfin c'est pas trop recommandé de le mettre dans make.conf celui là parce que tu vas tout installer en unstable...utilises le avec parcimonies juste quand tu en as besoin devant une commande emerge

----------

## ghoti

 *kwenspc wrote:*   

> à ma connaissance pour ACCEPT_KEYWORDS c'est "~x86" qu'il faut mettre... oublis pas le "~"
> 
> et c'est un "_" entre accept et keywords 
> 
> enfin c'est pas trop recommandé de le mettre dans make.conf celui là parce que tu vas tout installer en unstable...utilises le avec parcimonies juste quand tu en as besoin devant une commande emerge

 

C'est un peu contradictoire !

D'une part tu lui dis de mettre "~x86" et d'autre part tu lui recommandes de ne pas tout installer en instable !

En fait ACCEPT_KEYWORDS n'est pas uniquement destiné à gérer les paquets instables mais également à spécifier l'architecture (x86,ppc, ...)

Pour installer en "stable" et n'accepter que les paquets compatibles avec l'architecture x86, le paramètre à mettre dans /etc/make.conf est bel et bien

```
ACCEPT_KEYWORDS="x86"
```

----------

## kwenspc

...bah ma variable ACCPT_KEYWORDS n' est pas décommenté :

 *Quote:*   

> 
> 
> # Gentoo is using a new masking system to allow for easier stability testing
> 
> # on packages. KEYWORDS are used in ebuilds to mask and unmask packages based
> ...

 

 j'ai chopé ça direct dans mon make.conf...

et d'après ce que j'ai compris (bon ok mon anglais est loin d'être au top) ACCEPT_KEYWORDS permet de spécifier si l'on veut pouvoir emerge des ebuilds masqué donc dit "instable"...j'ai jamais eu à mettre ACCEPT_KEYWORDS="x86"...quand j'en ai besoin je fais ACCEPT_KEYWORDS="~x86"

Bon en même temps je dis ça mais, ghoti tu dois sans doute avoir raison sur la valeur de ACCEPT_KEYWORDS en défaut : mes fichiers n'ont pas été updatés depuis 8mois   :Laughing: 

alors peut-être que ça a changé auquel il fo oublier mon post du dessus  :Confused: 

relis bien mon post, il n'y a rien de contradictoire, je lui dis de mettre "~x86" comme valeur parce que je pensais qu'il s'était trompé dans la sienne, mais ensuite je dis que c n'est pas recommandé d'utiliser ce mot clé. mais il est vrai que je me suis basé sur le texte que j'ai mis au dessus là et qui a peut-être évolué depuis...sincèrement je savais pas qu'on pouvait mettre ACCEPT_KEYWORDS="x86" donc je retire ce que j'ai dis et je me prosterne devant ceux qui savent mieux que moi   :Wink:   (note : il y en a tellement que je ne peus tous les compter!!!)

----------

## ghoti

Ma version de make.conf est encore basée sur la première version que j'avais installée en 2002. Le "x86" y était explicitement indiqué comme tel à l'époque.

Mais c'est vrai que emerge détermine le "arch" par défaut, probablement (supposition  :Wink:  ) sur base des valeurs inscrites dans le fichier /etc/make.profile/make.defaults

Donc, en effet, il n'est pas (plus?) obligatoire de redéfinir la variable dans make.conf, mais ce n'est pas une erreur de le faire.

Pour le "~x86" dans ton post, j'avais bien compris ce que tu voulais dire mais j'avais un peu peur que ça ne perturbe notre ami !  :Wink: 

----------

## corto maltese

Salut a tous,

j'ai reslolu mon problem de compilation en installant le stage trois i 686 au lieu de athlon xp.

J'etais persuadé au depart d'avoir un athlon xp sur ma machine alors que c'etait un duron amd.

Veuillez m'excuser pour cette erreur de grand debutant dans le monde linux et en info en general.

 Et merci pour votre aide 

Corto

PS : quelqu'un saurait-il expliquer pour la compile ne marchait pas ?

----------

## thanhat

 *corto maltese wrote:*   

> Salut a tous,
> 
> j'ai reslolu mon problem de compilation en installant le stage trois i 686 au lieu de athlon xp.
> 
> J'etais persuadé au depart d'avoir un athlon xp sur ma machine alors que c'etait un duron amd.
> ...

 

Ton problème vient du du -mcpu dans ton make.conf. Oublie le, chez moi ça fait échouer la compilation à coup sûr

----------

## Trevoke

T'es alle le chercher loin ce message!  :Smile: 

Juin 2004 -> Mars 2005, si ca se trouve le gars est sous *BSD maintenant..  :Smile: 

----------

## thanhat

J'ai vu ça après coup !  :Smile: 

En fait, j'ai le même problème que ce monsieur... Cannot create executable... Alors je fais le tour de la question sur le forum.

 *Trevoke wrote:*   

> T'es alle le chercher loin ce message! 
> 
> Juin 2004 -> Mars 2005, si ca se trouve le gars est sous *BSD maintenant.. 

 

----------

## Starch

Certes, mais depuis la raison a peu de chances d'être la même  :Smile: 

----------

## Trevoke

En general c'est une erreur de make.conf CFLAGS, alors fais peter.

----------

## thanhat

Si seulement... mais bon, je balance quand même...

```

CFLAGS="-march=pentium3 -Os -pipe -fomit-frame-pointer"

CHOST="i686-pc-linux-gnu"

CXXFLAGS="${CFLAGS}"

USE="-X -kde -gnome -qt -gtk -java -ipv6 -acl atm nptl nptlonly -oss -alsa nls userlocales unicode hardened"

#MAKEOPTS="-j3"

#CCACHE_SIZE="2G"

#FEATURES="ccache distcc"

GENTOO_MIRRORS="http://mir.zyrianes.net/gentoo/ ftp://194.117.143.70/mirrors/gentoo http://194.117.143.71 ftp://mir.zyrianes.net/gentoo/
```

Oui j'ai déjà décommenté FEATURES etc...

Déjà essayé fix_libtools_files.sh, revdep-rebuild etc...  :Crying or Very sad: 

----------

## Trevoke

Alors a priori tu as un bi-processeur avec deux pentiums 3 (le pentium 3, ca qualifie pour 686? je ne sais pas) dont tu te sers comme serveur (vu le manque evident de GUI) et en plus tu t'offres le luxe de te servir du flag hardened.

Donc tu te sers de gcc hardened aussi?

Et ca foire quand tu essayes de compiler n'importe quoi?

----------

## thanhat

Non, en fait, je fais de la compilation distribuée sur mon réseau (de Gentoo...) avec DISTCC.

Par contre, oui, ça foire à chaque fois que j'essaie de compiler j'ai ce message :

```

C++ compiler cannot create executables

```

----------

## Trevoke

thanhat, donne-nous un peu de contexte s'il te plait  :Smile: 

----------

## thanhat

Oui c'est vrai désolé. Je suis un peu vague.

Alors tout a commencé lorsque j'ai voulu jouer avec le flag hardened  :Rolling Eyes:  , j'ai recompilé gcc, puis les problèmes sont arrivés ensuite.

Plus moyen de compiler quoique ce soit.  :Evil or Very Mad: 

Ensuite j'ai essayé ceci :

```
revdep-rebuild 
```

Qui me dit qu'il a envie de faire :

```
emerge --oneshot --nodeps  =app-arch/rar-3.4.0 =app-text/aspell-0.50.5-r4 =sys-apps/groff-1.19.1-r2 =app-text/sablotron-1.0 =dev-lang/swig-1.3.21 =media-libs/tiff-3.7.1-r1 =dev-php/php-4.3.10 =net-analyzer/nmap-3.75 =net-print/cups-1.1.23-r1
```

Lors de la compilation de aspell, il me met le message suivant :

```
checking whether to enable maintainer-specific portions of Makefiles... no

checking for i686-pc-linux-gnu-g++... i686-pc-linux-gnu-g++

checking for C++ compiler default output file name... configure: error: C++ compiler cannot create executables
```

J'ai réemergé libtool, et là j'essaie de recompiler gcc... mais bon pas avant 35mn (ce n'est qu'un pov petit P3 !)

Si quelqu'un a des pistes, je suis preneur...

----------

## Trevoke

Je suis curieux - que te dis un 

```
gcc-config -l
```

 ? (L, pas I)

En passant..

 */usr/portage/profiles/use.desc wrote:*   

> hardened - activate default security enhancements for toolchain (gcc, glibc, binutils)
> 
> hardenedphp - include the hardened php security patch for the php group of ebuilds
> 
> pic - Build Position Independent Code. Needed for prelink or the hardened toolchain

 

Tu as fait un peu de recherche avant de te lancer dans hardened?

----------

## thanhat

Oui, oui j'ai bien étudié la question sur les hardened.

```

Gentoo root # gcc-config -l

[1] i686-pc-linux-gnu-3.3.5 *

[2] i686-pc-linux-gnu-3.3.5-hardened

[3] i686-pc-linux-gnu-3.3.5-hardenednopie

[4] i686-pc-linux-gnu-3.3.5-hardenednossp
```

Bon, la compilation de gcc a fonctionné (je ne sais pas pourquoi vu qu'il était censé ne plus faire d'éxecutable).

Et tout refonctionne.

Allez comprendre !  :Rolling Eyes: 

Merci pour votre soutien !

----------

## Trevoke

C'est-a-dire que quand tu as mis le hardened flag, tu as recompile glibc, gcc et binutils?

Et tu avais bien la version hardened de GCC en version dont tu te servas?

----------

## thanhat

J'ai mis le hardened flag, puis j'ai recompilé gcc, et lorsque j'ai voulu recompiler glibc, les problèmes ont commencé.

----------

## thanhat

Je viens de comprendre un truc, j'ai mis le use flag hardened, mais je ne l'ai pas activé lors de mon gcc-config.

(Voir plus haut mon gcc-config -l)  :Smile: 

----------

