# [gcc-4.4.1] File collision - Retours d'expérience (résolu)

## razer

Hello,

J'essaye de mettre à jour gcc : 4.3.4 -> 4.4.1

Je suis sujet à des problèmes de collisions avec l'ancienne version.

De là, les questions :

J'ai bien trouvé une astuce pour passer outre les erreurs d'emerge concernant ces collisions, via la variable FEATURES, mais je suppose que mon gcc-4.3.4 deviendra inutilisable, risque que je refuse de prendre. Merci de préciser ce point

Si je décide d'utiliser ce tweak, est ce possible de réaliser l'emerge sans que la compilation soit refaite ? J'ai une version qui a déjà compilé sans soucis, juste l'emerge bloque

Par ailleurs, est ce que des personnes ici ont réalisé cette migration et peuvent me donner leur retour d'expérience ?

Merci d'avance

Voici le log :

```
 * Messages for package sys-devel/gcc-4.4.1:

 * This package will overwrite one or more files that may belong to other

 * packages (see list below). You can use a command such as `portageq

 * owners / <filename>` to identify the installed package that owns a

 * file. If portageq reports that only one package owns a file then do

 * NOT file a bug report. A bug report is only useful if it identifies at

 * least two or more packages that are known to install the same file(s).

 * If a collision occurs and you can not explain where the file came from

 * then you should simply ignore the collision since there is not enough

 * information to determine if a real problem exists. Please do NOT file

 * a bug report at http://bugs.gentoo.org unless you report exactly which

 * two packages install the same file(s). Once again, please do NOT file

 * a bug report unless you have completely understood the above message.

 * 

 * Detected file collision(s):

 * 

 *    /usr/lib64/libgomp.spec

 *    /usr/lib64/libmudflap.a

 *    /usr/lib64/libmudflapth.la

 *    /usr/lib64/libsupc++.la

 *    /usr/lib64/libstdc++.la

 *    /usr/lib64/libstdc++_pic.a

 *    /usr/lib64/libmudflap.so.0.0.0

 *    /usr/lib64/libgomp.so.1.0.0

 *    /usr/lib64/libstdc++.a

 *    /usr/lib64/libmudflapth.a

 *    /usr/lib64/libmudflap.la

 *    /usr/lib64/libgomp.la

 *    /usr/lib64/libgomp.a

 *    /usr/lib64/libgcc_s.so.1

 *    /usr/lib64/libmudflapth.so.0.0.0

 *    /usr/lib64/libsupc++.a

 *    /usr/lib32/libgomp.spec

 *    /usr/lib32/libmudflap.a

 *    /usr/lib32/libmudflapth.la

 *    /usr/lib32/libsupc++.la

 *    /usr/lib32/libstdc++.la

 *    /usr/lib32/libstdc++_pic.a

 *    /usr/lib32/libmudflap.so.0.0.0

 *    /usr/lib32/libgomp.so.1.0.0

 *    /usr/lib32/libstdc++.a

 *    /usr/lib32/libmudflapth.a

 *    /usr/lib32/libmudflap.la

 *    /usr/lib32/libgomp.la

 *    /usr/lib32/libgomp.a

 *    /usr/lib32/libgcc_s.so.1

 *    /usr/lib32/libmudflapth.so.0.0.0

 *    /usr/lib32/libsupc++.a

 *    /usr/lib64/libmudflap.so.0

 *    /usr/lib64/libgomp.so

 *    /usr/lib64/libstdc++.so

 *    /usr/lib64/libmudflapth.so

 *    /usr/lib64/libgomp.so.1

 *    /usr/lib64/libmudflapth.so.0

 *    /usr/lib64/libgcc_s.so

 *    /usr/lib64/libmudflap.so

 *    /usr/lib64/libstdc++.so.6

 *    /usr/lib32/libmudflap.so.0

 *    /usr/lib32/libgomp.so

 *    /usr/lib32/libstdc++.so

 *    /usr/lib32/libmudflapth.so

 *    /usr/lib32/libgomp.so.1

 *    /usr/lib32/libmudflapth.so.0

 *    /usr/lib32/libgcc_s.so

 *    /usr/lib32/libmudflap.so

 *    /usr/lib32/libstdc++.so.6

 * 

 * Searching all installed packages for file collisions...

 * 

 * Press Ctrl-C to Stop

 * 

 * sys-devel/gcc-4.3.4

 *    /usr/lib32/libgcc_s.so

 *    /usr/lib32/libgcc_s.so.1

 *    /usr/lib32/libgomp.a

 *    /usr/lib32/libgomp.la

 *    /usr/lib32/libgomp.so

 *    /usr/lib32/libgomp.so.1

 *    /usr/lib32/libgomp.so.1.0.0

 *    /usr/lib32/libgomp.spec

 *    /usr/lib32/libmudflap.a

 *    /usr/lib32/libmudflap.la

 *    /usr/lib32/libmudflap.so

 *    /usr/lib32/libmudflap.so.0

 *    /usr/lib32/libmudflap.so.0.0.0

 *    /usr/lib32/libmudflapth.a

 *    /usr/lib32/libmudflapth.la

 *    /usr/lib32/libmudflapth.so

 *    /usr/lib32/libmudflapth.so.0

 *    /usr/lib32/libmudflapth.so.0.0.0

 *    /usr/lib32/libstdc++.a

 *    /usr/lib32/libstdc++.la

 *    /usr/lib32/libstdc++.so

 *    /usr/lib32/libstdc++.so.6

 *    /usr/lib32/libstdc++_pic.a

 *    /usr/lib32/libsupc++.a

 *    /usr/lib32/libsupc++.la

 *    /usr/lib64/libgcc_s.so

 *    /usr/lib64/libgcc_s.so.1

 *    /usr/lib64/libgomp.a

 *    /usr/lib64/libgomp.la

 *    /usr/lib64/libgomp.so

 *    /usr/lib64/libgomp.so.1

 *    /usr/lib64/libgomp.so.1.0.0

 *    /usr/lib64/libgomp.spec

 *    /usr/lib64/libmudflap.a

 *    /usr/lib64/libmudflap.la

 *    /usr/lib64/libmudflap.so

 *    /usr/lib64/libmudflap.so.0

 *    /usr/lib64/libmudflap.so.0.0.0

 *    /usr/lib64/libmudflapth.a

 *    /usr/lib64/libmudflapth.la

 *    /usr/lib64/libmudflapth.so

 *    /usr/lib64/libmudflapth.so.0

 *    /usr/lib64/libmudflapth.so.0.0.0

 *    /usr/lib64/libstdc++.a

 *    /usr/lib64/libstdc++.la

 *    /usr/lib64/libstdc++.so

 *    /usr/lib64/libstdc++.so.6

 *    /usr/lib64/libstdc++_pic.a

 *    /usr/lib64/libsupc++.a

 *    /usr/lib64/libsupc++.la

 * 

 * Package 'sys-devel/gcc-4.4.1' NOT merged due to file collisions. If

 * necessary, refer to your elog messages for the whole content of the

 * above message.

```

Last edited by razer on Sun Oct 11, 2009 10:59 am; edited 1 time in total

----------

## Leander256

C'est très étrange ton problème, on dirait que tu n'as pas les slots... Quels sont les USE utilisés pour faire le emerge? C'est juste une intuition mais je me demande si tu n'as pas activé vanilla, entraînant par la la désactivation des patches Gentoo pour avoir plusieurs versions de gcc installées en parallèle. En tout cas il devrait installer dans des répertoires avec numéro de version:

```
# equery f gcc | grep libstdc++.a

/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/32/libstdc++.a

/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/libstdc++.a
```

En outre je n'ai eu aucun problème avec gcc 4.4.1 depuis son installation fin juillet.

----------

## razer

Il y a en effet un truc bizarre avec les slots et les chemins (cf plus bas) : merci de m'avoir mis la puce à l'oreille

Je fais une réinstall de gcc-4.3, on verra bien

```
# equery f gcc | grep libstdc++.a 

/usr/lib32/libstdc++.a

/usr/lib64/libstdc++.a

# ls /usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/

libgcc.a     libgcc_eh.a  libgcov.a 

# equery uses gcc

 * Searching for gcc ...

[ Legend : U - flag is set in make.conf       ]

[        : I - package is installed with flag ]

[ Colors : set, unset                         ]

 * Found these USE flags for sys-devel/gcc-4.4.1:

 U I

 - - altivec     : Adds support for optimizations for G4 and G5/ppc970

                   processors

 - - bootstrap   : !!internal use only!! DO NOT SET THIS FLAG YOURSELF!, used

                   during original system bootstrapping [make stage2]

 - - build       : !!internal use only!! DO NOT SET THIS FLAG YOURSELF!, used

                   for creating build images and the first half of

                   bootstrapping [make stage1]

 - - doc         : Adds extra documentation (API, Javadoc, etc)

 - - fixed-point : Enable fixed-point arithmetic support for MIPS targets in

                   gcc (Warning: significantly increases compile time!)

 - - fortran     : Adds support for fortran (formerly f77)

 - - gcj         : Enable building with gcj (The GNU Compiler for the Javatm

                   Programming Language)

 - - graphite    : Add support for the framework for loop optimizations based

                   on a polyhedral intermediate representation

 + + gtk         : Adds support for x11-libs/gtk+ (The GIMP Toolkit)

 - - hardened    : activate default security enhancements for toolchain (gcc,

                   glibc, binutils)

 - - ip28        : Enable building a compiler capable of building a kernel for

                   SGI Indigo2 Impact R10000 (IP28)

 - - ip32r10k    : Enable building a compiler capable of building an

                   experimental kernel for SGI O2 w/ R1x000 CPUs (IP32)

 - - libffi      : Build the portable foreign function interface library

 + + mudflap     : Add support for mudflap, a pointer use checking library

 + + multilib    : On 64bit systems, if you want to be able to compile 32bit

                   and 64bit binaries

 - - multislot   : Allow for SLOTs to include minor version (3.3.4 instead of

                   just 3.3)

 - - n32         : Enable n32 ABI support on mips

 - - n64         : Enable n64 ABI support on mips

 + + nls         : Adds Native Language Support (using gettext - GNU locale

                   utilities)

 - - nocxx       : Disable support for C++ (DON'T USE THIS UNLESS YOU KNOW WHAT

                   YOU'RE DOING)

 + + nptl        : Enable support for Native POSIX Threads Library, the new

                   threading module (requires linux-2.6 or better usually)

 - - objc        : Build support for the Objective C code language

 - - objc++      : Build support for the Objective C++ language

 - - objc-gc     : Build support for the Objective C code language Garbage

                   Collector

 + + openmp      : Build support for the OpenMP (support parallel computing),

                   requires >=sys-devel/gcc-4.2 built with USE="openmp"

 - - test        : Workaround to pull in packages needed to run with

                   FEATURES=test. Portage-2.1.2 handles this internally, so

                   don't set it in make.conf/package.use anymore

 - - vanilla     : Do not add extra patches which change default behaviour; DO

                   NOT USE THIS ON A GLOBAL SCALE as the severity of the

                   meaning changes drastically

```

----------

## razer

Bon j'ai réessayé de compiler la version 4.3.4, j'ai même essayé sans le flag "openmp", rien n'y fait : les libs s'installent directement dans /usr/lib64, /usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4 ne contient que les include et des broutilles.

J'y comprend rien, merci de m'aider

----------

## razer

J'ai résolu mon problème de la manière suivante :

Copie des librairies relatives au package gcc installé de /usr/lib64 et /usr/lib32 vers /usr/lib/gcc/x86.../<version>

Modification équivalente aux copies dans /var/db/pkg/sys-devel/gcc-<version>/CONTENTS

Création d'un paquet binaire de gcc via quickpkg

Installation du paquet binaire

Emerge du système : emerge -e system

Les librairies ont enfin pris place au bon endroit

Je pense que mon problème était relatif à distcc, que j'avais utilisé il y a quques temps et qui était resté activé dans mon make.conf

----------

