# GCC 3.4.x

## Metallic

Кто-нибудь пользуется этим компилятором по умолчанию достаточно долго?

----------

## YD

Пол года - достаточный срок?

----------

## Metallic

 *YD wrote:*   

> Пол года - достаточный срок?

 

Думаю да, вот после апгрейда не делается команда

```

emerge -e system && emerge -e world

```

отваливается первая половина, на gcc 3.3.6  :Sad:  Чем можно помочь?

----------

## YD

Ну и какой толк?

во-первых:

```
gcc-config -l

gcc-config N

env-update

source /etc/profile
```

во-вторых:

AFAIK, во множество world входит и system (:

```
emerge -eD world
```

но я сам делаю по-другому, хоят очень редко

```
rn -rf /usr/[portage/]packages; emerge binutils glibc gcc && energe -eDk world
```

А вот на каком именно ebuild'е и с какой ошибкой - пиши.

----------

## EdiG

```
emerge sync
```

```
emerge -pvtuD
```

```
USE="nopie nossp" emerge binutils glibc gcc 
```

```
 fix_libtool_files.sh  gcc-3.3.3 (старая версия gcc)
```

```
gcc-config -L
```

```
gcc-config 1 
```

```
env-update & source /etc/profile 
```

----------

## Metallic

```
!!! ERROR: sys-devel/gcc-3.3.6 failed.

!!! Function gcc_do_make, Line 1212, Exitcode 2

!!! emake failed with bootstrap-lean
```

Вот такая вот кака, просто видимо какие-то еще deps зависят от gcc 3.3.x и вот он хочет чтобы и это собиралось  :Sad: 

----------

## EdiG

 *Quote:*   

> !!! ERROR: sys-devel/gcc-3.3.6 failed.
> 
> !!! Function gcc_do_make, Line 1212, Exitcode 2
> 
> !!! emake failed with bootstrap-lean

 

полный лог  покажи

----------

## Metallic

Вот кусок с ошибками примерно

```
rm -rf ./libgcc.a

ar  rc ./libgcc.a libgcc/./_muldi3.oS libgcc/./_negdi2.oS libgcc/./_lshrdi3.oS libgcc/./_ashldi3.oS libgcc/./_ashrdi3.oS libgcc/./_ffsdi2.oS libgcc/./_clz.oS libgcc/./_cmpdi2.oS libgcc/./_ucmpdi2.oS libgcc/./_floatdidf.oS libgcc/./_floatdisf.oS libgcc/./_fixunsdfsi.oS libgcc/./_fixunssfsi.oS libgcc/./_fixunsdfdi.oS libgcc/./_fixdfdi.oS libgcc/./_fixunssfdi.oS libgcc/./_fixsfdi.oS libgcc/./_fixxfdi.oS libgcc/./_fixunsxfdi.oS libgcc/./_floatdixf.oS libgcc/./_fixunsxfsi.oS libgcc/./_fixtfdi.oS libgcc/./_fixunstfdi.oS libgcc/./_floatditf.oS libgcc/./_clear_cache.oS libgcc/./_trampoline.oS libgcc/./__main.oS libgcc/./_exit.oS libgcc/./_absvsi2.oS libgcc/./_absvdi2.oS libgcc/./_addvsi3.oS libgcc/./_addvdi3.oS libgcc/./_subvsi3.oS libgcc/./_subvdi3.oS libgcc/./_mulvsi3.oS libgcc/./_mulvdi3.oS libgcc/./_negvsi2.oS libgcc/./_negvdi2.oS libgcc/./_ctors.oS libgcc/./_stack_smash_handler.oS libgcc/./_divdi3.oS libgcc/./_moddi3.oS libgcc/./_udivdi3.oS libgcc/./_umoddi3.oS libgcc/./_udiv_w_sdiv.oS libgcc/./_udivmoddi4.oS libgcc/./_eprintf.oS libgcc/./_bb.oS libgcc/./__gcc_bcmp.oS

if [ -f ranlib ] || ( [ i686-pc-linux-gnu = i686-pc-linux-gnu ] && [ -f /usr/bin/ranlib -o -f /bin/ranlib ] ) ; then \

  ranlib ./libgcc.a ; \

else true; fi;

mv libgcc/./tmp-libgcc.map libgcc/./libgcc.map

./xgcc -B./ -B/usr/i686-pc-linux-gnu/bin/ -isystem /usr/i686-pc-linux-gnu/include -isystem /usr/i686-pc-linux-gnu/sys-include -O2  -DIN_GCC    -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -isystem ./include  -fPIC -DHAVE_SYSLOG -g -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED  -D_LIBC_PROVIDES_SSP_ -shared -nodefaultlibs -Wl,--soname=libgcc_s.so.1 -Wl,--version-script=libgcc/./libgcc.map -o libgcc_s.so.1   libgcc/./_muldi3.o libgcc/./_negdi2.o libgcc/./_lshrdi3.o libgcc/./_ashldi3.o libgcc/./_ashrdi3.o libgcc/./_ffsdi2.o libgcc/./_clz.o libgcc/./_cmpdi2.o libgcc/./_ucmpdi2.o libgcc/./_floatdidf.o libgcc/./_floatdisf.o libgcc/./_fixunsdfsi.o libgcc/./_fixunssfsi.o libgcc/./_fixunsdfdi.o libgcc/./_fixdfdi.o libgcc/./_fixunssfdi.o libgcc/./_fixsfdi.o libgcc/./_fixxfdi.o libgcc/./_fixunsxfdi.o libgcc/./_floatdixf.o libgcc/./_fixunsxfsi.o libgcc/./_fixtfdi.o libgcc/./_fixunstfdi.o libgcc/./_floatditf.o libgcc/./_clear_cache.o libgcc/./_trampoline.o libgcc/./__main.o libgcc/./_exit.o libgcc/./_absvsi2.o libgcc/./_absvdi2.o libgcc/./_addvsi3.o libgcc/./_addvdi3.o libgcc/./_subvsi3.o libgcc/./_subvdi3.o libgcc/./_mulvsi3.o libgcc/./_mulvdi3.o libgcc/./_negvsi2.o libgcc/./_negvdi2.o libgcc/./_ctors.o libgcc/./_stack_smash_handler.o libgcc/./_divdi3.o libgcc/./_moddi3.o libgcc/./_udivdi3.o libgcc/./_umoddi3.o libgcc/./_udiv_w_sdiv.o libgcc/./_udivmoddi4.o  libgcc/./unwind-dw2.o libgcc/./unwind-dw2-fde-glibc.o libgcc/./unwind-sjlj.o libgcc/./unwind-c.o -lc && rm -f libgcc_s.so && ln -s libgcc_s.so.1 libgcc_s.so

make[3]: Leaving directory `/var/tmp/portage/gcc-3.3.6/work/build/gcc'

make[2]: Leaving directory `/var/tmp/portage/gcc-3.3.6/work/build/gcc'

echo timestamp > stage1_build

echo stage1_build > stage_last

make stage1

make[2]: Entering directory `/var/tmp/portage/gcc-3.3.6/work/build/gcc'

if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi

make -f libgcc.mk libgcc-stage-start stage=stage1

make[3]: Entering directory `/var/tmp/portage/gcc-3.3.6/work/build/gcc'

for dir in libgcc; do \

  if [ -d stage1/$dir ]; then true; else /bin/sh /var/tmp/portage/gcc-3.3.6/work/gcc-3.3.6/gcc/mkinstalldirs stage1/$dir; fi; \

done

mkdir stage1/libgcc

for dir in libgcc; do \

  mv $dir/*.o stage1/$dir; \

  test ! -f $dir/stacknote.s || mv $dir/stacknote.s stage1/$dir; \

done

make[3]: Leaving directory `/var/tmp/portage/gcc-3.3.6/work/build/gcc'

for dir in intl cp f ; \

 do \

   if [ -d stage1/$dir ] ; then true ; else mkdir stage1/$dir ; fi ; \

 done

mv *.o insn-flags.h insn-config.h insn-codes.h insn-output.c insn-recog.c insn-emit.c insn-extract.c insn-peep.c insn-attr.h insn-attrtab.c insn-opinit.c insn-constants.h tm-preds.h tree-check.h insn-conditions.c s-flags s-config s-codes s-mlib s-genrtl s-gtype gtyp-gen.h s-output s-recog s-emit s-extract s-peep s-check s-conditions s-attr s-attrtab s-opinit s-preds s-constants s-crt0 genemit genoutput genrecog genextract genflags gencodes genconfig genpeep genattrtab genattr genopinit gengenrtl gencheck genpreds genconstants gengtype genconditions genrtl.c genrtl.h gt-*.h gtype-*.h gtype-desc.c xgcc cpp cc1  crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o  gcc-cross cc1obj protoize unprotoize specs collect2 collect2 gcov *.[0-9][0-9].* *.[si] libcpp.a libbackend.a libgcc.mk g++ g++-cross cc1plus g77 g77-cross f771 stage1

mv: невозможно выполнить stat для `s-crt0': No such file or directory

mv: невозможно выполнить stat для `crtbegin.o': No such file or directory

mv: невозможно выполнить stat для `crtbeginS.o': No such file or directory

mv: невозможно выполнить stat для `crtbeginT.o': No such file or directory

mv: невозможно выполнить stat для `crtend.o': No such file or directory

mv: невозможно выполнить stat для `crtendS.o': No such file or directory

mv: невозможно выполнить stat для `gcc-cross': No such file or directory

mv: невозможно выполнить stat для `cc1obj': No such file or directory

mv: невозможно выполнить stat для `protoize': No such file or directory

mv: невозможно выполнить stat для `unprotoize': No such file or directory

mv: невозможно выполнить stat для `collect2': No such file or directory

mv: невозможно выполнить stat для `gcov': No such file or directory

mv: невозможно выполнить stat для `*.[0-9][0-9].*': No such file or directory

mv: невозможно выполнить stat для `*.[si]': No such file or directory

mv: невозможно выполнить stat для `g++-cross': No such file or directory

mv: невозможно выполнить stat для `cc1plus': No such file or directory

mv: невозможно выполнить stat для `g77-cross': No such file or directory

mv: невозможно выполнить stat для `f771': No such file or directory

make[2]: [stage1-start] Ошибка 1 (игнорирована)

mv intl/*.o stage1/intl

mv: невозможно выполнить stat для `intl/*.o': No such file or directory

make[2]: [stage1-start] Ошибка 1 (игнорирована)

if [ -f as ] ; then (cd stage1 && ln -s ../as .) ; else true ; fi

if [ -f ld ] ; then (cd stage1 && ln -s ../ld .) ; else true ; fi

if [ -f collect-ld ] ; then (cd stage1 && ln -s ../collect-ld .) ; else true ; fi

rm -f stage1/libgcc.a stage1/libgcc_eh.a stage1/libgcc_s*.so

cp libgcc.a stage1

if [ -f ` if [ -f /var/tmp/portage/gcc-3.3.6/work/build/gcc/../binutils/ranlib ] ; then echo /var/tmp/portage/gcc-3.3.6/work/build/gcc/../binutils/ranlib ; else if [ "i686-pc-linux-gnu" = "i686-pc-linux-gnu" ] ; then echo ranlib; else t='s,^,i686-pc-linux-gnu-,'; echo ranlib | sed -e $t ; fi; fi` ] || ( [ "i686-pc-linux-gnu" = "i686-pc-linux-gnu" ] && [ -f /usr/bin/ranlib -o -f /bin/ranlib ] ) ; then \

  ` if [ -f /var/tmp/portage/gcc-3.3.6/work/build/gcc/../binutils/ranlib ] ; then echo /var/tmp/portage/gcc-3.3.6/work/build/gcc/../binutils/ranlib ; else if [ "i686-pc-linux-gnu" = "i686-pc-linux-gnu" ] ; then echo ranlib; else t='s,^,i686-pc-linux-gnu-,'; echo ranlib | sed -e $t ; fi; fi` stage1/libgcc.a; \

else true; fi

if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stage1; \

  if [ -f ` if [ -f /var/tmp/portage/gcc-3.3.6/work/build/gcc/../binutils/ranlib ] ; then echo /var/tmp/portage/gcc-3.3.6/work/build/gcc/../binutils/ranlib ; else if [ "i686-pc-linux-gnu" = "i686-pc-linux-gnu" ] ; then echo ranlib; else t='s,^,i686-pc-linux-gnu-,'; echo ranlib | sed -e $t ; fi; fi` ] || ( [ "i686-pc-linux-gnu" = "i686-pc-linux-gnu" ] && [ -f /usr/bin/ranlib -o -f /bin/ranlib ] ) ; then \

   ` if [ -f /var/tmp/portage/gcc-3.3.6/work/build/gcc/../binutils/ranlib ] ; then echo /var/tmp/portage/gcc-3.3.6/work/build/gcc/../binutils/ranlib ; else if [ "i686-pc-linux-gnu" = "i686-pc-linux-gnu" ] ; then echo ranlib; else t='s,^,i686-pc-linux-gnu-,'; echo ranlib | sed -e $t ; fi; fi` stage1/libgcc_eh.a; \

  else true; fi; fi

cp libgcc_s*.so stage1/

for f in .. ; do if [ x${f} != x.. ]; then \

  cp stage1/${f} . ; \

else true; \

fi; done

mv cp/*.o stage1/cp

mv -f f/*.o f/fini f/stamp-str f/str-*.h f/str-*.j g77spec.o stage1/f

mv: невозможно выполнить stat для `cp/*.o': No such file or directory

make[2]: [c++.stage1] Ошибка 1 (игнорирована)

mv: невозможно выполнить stat для `f/*.o': No such file or directory

mv: невозможно выполнить stat для `f/fini': No such file or directory

mv: невозможно выполнить stat для `f/stamp-str': No such file or directory

mv: невозможно выполнить stat для `f/str-*.h': No such file or directory

mv: невозможно выполнить stat для `f/str-*.j': No such file or directory

mv: невозможно выполнить stat для `g77spec.o': No such file or directory

make[2]: [f77.stage1] Ошибка 1 (игнорирована)

make[2]: Leaving directory `/var/tmp/portage/gcc-3.3.6/work/build/gcc'

echo timestamp > stage1_copy

echo stage2_build > stage_last

(cd stage1 && rm -f `echo main.o libbackend.a alias.o bb-reorder.o bitmap.o builtins.o caller-save.o calls.o cfg.o cfganal.o cfgbuild.o cfgcleanup.o cfglayout.o cfgloop.o cfgrtl.o combine.o conflict.o convert.o cse.o cselib.o dbxout.o debug.o df.o diagnostic.o doloop.o dominance.o dwarf2asm.o dwarf2out.o dwarfout.o emit-rtl.o except.o explow.o expmed.o expr.o final.o flow.o fold-const.o function.o gcse.o genrtl.o ggc-common.o global.o graph.o gtype-desc.o haifa-sched.o hashtable.o hooks.o ifcvt.o insn-attrtab.o insn-emit.o insn-extract.o insn-opinit.o insn-output.o insn-peep.o insn-recog.o integrate.o intl.o jump.o  langhooks.o lcm.o lists.o local-alloc.o loop.o mbchar.o optabs.o params.o predict.o print-rtl.o print-tree.o profile.o ra.o ra-build.o ra-colorize.o ra-debug.o ra-rewrite.o real.o recog.o reg-stack.o regclass.o regmove.o regrename.o reload.o reload1.o reorg.o resource.o rtl.o rtlanal.o rtl-error.o sbitmap.o sched-deps.o sched-ebb.o sched-rgn.o sched-vis.o sdbout.o sibcall.o simplify-rtx.o ssa.o ssa-ccp.o ssa-dce.o stmt.o stor-layout.o stringpool.o timevar.o toplev.o tracer.o tree.o tree-dump.o tree-inline.o unroll.o varasm.o varray.o version.o vmsdbgout.o xcoffout.o et-forest.o protector.o ggc-page.o i386.o  c-parse.o c-lang.o c-pretty-print.o attribs.o c-errors.o c-lex.o c-pragma.o c-decl.o c-typeck.o c-convert.o c-aux-info.o c-common.o c-opts.o c-format.o c-semantics.o c-objc-common.o c-dump.o libcpp.a  cpplib.o cpplex.o cppmacro.o cppexp.o cppfiles.o cpptrad.o cpphash.o cpperror.o cppinit.o cppdefault.o cppmain.o hashtable.o line-map.o mkdeps.o prefix.o mbchar.o *.c *.h gen*`)

make CC=" stage1/xgcc -Bstage1/ -B/usr/i686-pc-linux-gnu/bin/" \

         STAGE_PREFIX=stage1/ \

         ADAC="\$(CC)" AR_FOR_TARGET="ar" RANLIB_FOR_TARGET="ranlib" CFLAGS="-O2 -march=pentium-m -pipe" LDFLAGS="" WARN_CFLAGS="\$(GCC_WARN_CFLAGS)" STRICT_WARN="-Wtraditional -pedantic -Wno-long-long" libdir=/usr/lib LANGUAGES="c gcov c++ f77" MAKEOVERRIDES= OUTPUT_OPTION="-o \$@"

make[2]: Entering directory `/var/tmp/portage/gcc-3.3.6/work/build/gcc'

stage1/xgcc -Bstage1/ -B/usr/i686-pc-linux-gnu/bin/ -c    -O2 -march=pentium-m -pipe -DIN_GCC   -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wtraditional -pedantic -Wno-long-long   -DHAVE_CONFIG_H -DGENERATOR_FILE    -I. -I. -I/var/tmp/portage/gcc-3.3.6/work/gcc-3.3.6/gcc -I/var/tmp/portage/gcc-3.3.6/work/gcc-3.3.6/gcc/. -I/var/tmp/portage/gcc-3.3.6/work/gcc-3.3.6/gcc/config -I/var/tmp/portage/gcc-3.3.6/work/gcc-3.3.6/gcc/../include /var/tmp/portage/gcc-3.3.6/work/gcc-3.3.6/gcc/gengenrtl.c -o gengenrtl.o

cc1: error: bad value (pentium-m) for -march= switch

cc1: error: bad value (pentium-m) for -mcpu= switch

make[2]: *** [gengenrtl.o] Ошибка 1

make[2]: Leaving directory `/var/tmp/portage/gcc-3.3.6/work/build/gcc'

make[1]: *** [stage2_build] Ошибка 2

make[1]: *** Ожидание завершения заданий...

echo timestamp > clean_s1

make[1]: *** Ожидание завершения заданий...

make[1]: Leaving directory `/var/tmp/portage/gcc-3.3.6/work/build/gcc'

make: *** [bootstrap-lean] Ошибка 2

!!! ERROR: sys-devel/gcc-3.3.6 failed.

!!! Function gcc_do_make, Line 1212, Exitcode 2

!!! emake failed with bootstrap-lean

!!! If you need support, post the topmost build error, NOT this status message.
```

----------

## YD

Ну видимо в GCC3.3 xgcc во время сборки не понимает просто такой архитектуры. pentium-m вроде появился в GCC 3.4 только. Используй petnium3 или gcc-config -l и поставь свой GCC 3.4.x как теперешний.

----------

## Metallic

 *YD wrote:*   

> Ну видимо в GCC3.3 xgcc во время сборки не понимает просто такой архитектуры. pentium-m вроде появился в GCC 3.4 только. Используй petnium3 или gcc-config -l и поставь свой GCC 3.4.x как теперешний.

 

У меня он уже стоит, он почему-то хочет пересобрать и gcc 3.3.x при пересборке всей системы  :Sad:  Как это побороть?

----------

## YD

Ну как я сказал перейти на GCC3.4 как основа для системы. Если возврат не нужен будет (у меня была трабла по-моему только с psybnc, где я goto next заменил на continue и исправил ошибку и всё.). GCC3.4.4 уже можно юзать как основной. Вообщем:

Вся процедура с gcc-config, потом.

```
emerge libstdc++-v3

emerge -C =gcc-3.3*
```

----------

## hlroad

 *Metallic wrote:*   

>  *YD wrote:*   Ну видимо в GCC3.3 xgcc во время сборки не понимает просто такой архитектуры. pentium-m вроде появился в GCC 3.4 только. Используй petnium3 или gcc-config -l и поставь свой GCC 3.4.x как теперешний. 
> 
> У меня он уже стоит, он почему-то хочет пересобрать и gcc 3.3.x при пересборке всей системы  Как это побороть?

 

Интересно - сколько можно обсуждать одно и то же ? Десятки thread'ов на эту тему уже созданы. Вот последний. Заметим, что в любом случае тебе придётся что-то собирать с помощью gcc 3.3.x (либо сам gcc 3.3.x, либо его библиотеку совместимости), так что тебе придется освоить технологию указания CFLAGS для отдельного пакета.

----------

## EdiG

 *Quote:*   

> Интересно - сколько можно обсуждать одно и то же ? Десятки thread'ов на эту тему уже созданы. Вот последний. Заметим, что в любом случае тебе придётся что-то собирать с помощью gcc 3.3.x (либо сам gcc 3.3.x, либо его библиотеку совместимости), так что тебе придется освоить технологию указания CFLAGS для отдельного пакета.

 

надо howto на русском делать 

```
sys-libs/libstdc++-v3-3.3.4 
```

надо править ebuild чтоб для 3.4.4 собирался

----------

## hlroad

 *EdiG wrote:*   

> 
> 
> ```
> sys-libs/libstdc++-v3-3.3.4 
> ```
> ...

 

Надо меньше пить. А траву лучше совсем не курить. Зачем этот пакет вообще существует ? Чтобы программы, которые собраны с gcc 3.3.x (скажем RAR или openoffice-bin) можно было запускать. Если ты его с помощью gcc 3.4.4 соберешь - какой в нем будет смысл ? Версия libstdc++ для gcc 3.4.x в состав ebuild'а gcc 3.4.x входит...

----------

## EdiG

 *Quote:*   

> Надо меньше пить. А траву лучше совсем не курить. Зачем этот пакет вообще существует ? Чтобы программы, которые собраны с gcc 3.3.x (скажем RAR или openoffice-bin) можно было запускать. Если ты его с помощью gcc 3.4.4 соберешь - какой в нем будет смысл ? Версия libstdc++ для gcc 3.4.x в состав ebuild'а gcc 3.4.x входит...

 

для особо одареных это библиотека C++  и править надо ebuild чтоб использывать новый stl

А для того чтоб старые приложение запускать пей больше и кури почаще  =)

----------

## Metallic

Как тока её воткнул сразу и проблемы с драйверами решились, DRI появился и gcc 3.3.x больше не хочет оно, вообщем всем пасибо за советы все учту, а сейчас пока пойду 

```
emerge -e world
```

 сделаю  :Smile: 

----------

## hlroad

 *EdiG wrote:*   

> для особо одареных это библиотека C++ и править надо ebuild чтоб использывать новый stl

 

Не знаю кто такие "особо одаренные", и кем надо быть, чтобы предлагать пересобирать STL с новым STL'ем, но для людей, таки укурившихся в конец и потому слабо соображащих как устроена жизнь на этом свете могу объяснить по порядку. Libstdc++ - это стандартная библиотека C++ (содержащая в себе, в частности, STL). GCC 3.4.x - это новая версия gcc. Среди отличий gcc 3.4.x от gcc 3.3.x есть такое: "Several ABI bugs have been fixed. Unfortunately, these changes will break binary compatibility with earlier releases", что обозначает, что gcc 3.3.x включает в себя libstdc++.so.5.*.*, а gcc 3.4.x включает в себя libstdc++.so.6.*.* - несовместимых между собой ни в одну сторону (не столько из-за изменений в библиотеках, сколько из-за вышеоупомянутых изменениях в компиляторах). Чтобы решить эту проблемы в Gentoo имеется пакет libstdc++-v3, который представляет из себя "compatibility package for running binaries linked against a pre gcc 3.4 libstdc++" и который обязан быть собран gcc 3.3.x (причину смотри выше). Итак, снова: какой же степенью одаренности нужно обладать, чтобы предлагать его собирать gcc 3.4.x, спрашивается ?

 *EdiG wrote:*   

> А для того чтоб старые приложение запускать пей больше и кури почаще =)

 

Типа ничего работать не будет, но тебе будет уже все пофигу ? Вариант на любителя, прямо скажем...

----------

## viy

Я бы урезал в ваших сообщениях (hlroad и EdiG) лестные эпитеты, оставив только содержимое по существу.

Очень правильная переписка с кучей полезной инфы получилась бы.

Хоть и сам грешен, но все же эмоции иногда полезно засунуть в ...

----------

## hlroad

 *viy wrote:*   

> Очень правильная переписка с кучей полезной инфы получилась бы.

 

Эт вряд ли. Мне с gcc 3.3.x на gcc 3.4.x систему двигать не приходилось. C самого момента моего приобщения к Gentoo более года назад - только gcc 3.4.x. Правда пару раз систему с соотвествующей пересборкой всего на свете (из stage1) приходилось ставить. Принцип там простой:

1. Установить gcc 3.4.x

2. Установить libstdc++-v3

3. Снести gcc 3.3.x

4. Пересобрать world.

Все. Переставлять шаги нельзя: без второго нельзя сделать третий - python (и, стало быть, и portage) накроется медным тазом, без третьего не стоит делать четвертый (недобитый gcc 3.3.x возжелает обновиться/перекомпиляться и в этот момент переключит gcc-config на себя - так что система частично окажется собранной gcc 3.3.x, частично - gcc 3.4x; со всеми отсюда вытекающими последствиями касательно программ на C++). Можно, правда, "стоять над душой" и когда gcc 3.3.x "перетеянет одеяло на себя" вернуть его обратно (пару раз так и делалось), но лучше - снести. С глаз долой - из сердца вон. Правда есть шанс, что python (а, стало быть, и portage) перестанет запускаться - ну тут нужно env-update делать не забывать. При установленном libstdc++-v3 - это не проблема.

----------

## viy

Что "вряд ли"? Ваша переписка уже очень ценна информацией, которую ты привел.

Я же говорил о том, что все посты можно было писать без ругани в сторону друг друга.

----------

## YD

Если внимательно прочитать предыдущие топики, то можно всю это "ценную" инфу там найти.

----------

## viy

Можно. Отлично помню, что ты все это уже упоминал.

Я акцент на другом делал...

----------

## YD

Я заметил (: Моё обращение было скорей к другим участникам беседы.

----------

## Metallic

Хватит спорить  :Very Happy:  А  libstdc++-v3 можно собирать и gcc 3.4.x т.к. он ставит автоматом безопасные флаги оптимизации, которые в gcc 3.3.x есть  :Smile: 

----------

## YD

Для тех, кто в танке, ещё раз повторяю. Тут дело не в GCC, а в конкретной версии libstdc++, которая прилагается к GCC, если он установлен с поддержкой C++. Вы ставите libstdc++ старой версии ТОЛЬКО для того, чтобы программы линкованые к libstdc++ старой версии могли работать. Какой версией GCC она собрана - неважно. Главное чтобы собраная либа была небитая.

----------

## hlroad

 *YD wrote:*   

> Какой версией GCC она собрана - неважно. Главное чтобы собраная либа была небитая.

 

Увы и ах, но это - неправда. "The C++ ABI Section 3.3.3 specifications for the array construction routines __cxa_vec_new2 and __cxa_vec_new3 were changed to return NULL when the allocator argument returns NULL. These changes are incorporated into the libstdc++ runtime library". Это значит, что даже если вы умудритесь собрать старую версию libstdc++ с помощью новой версии gcc (3.4.x), то старые программы её использовать не смогут все равно. Потому пакет sys-libs/libstdc++-v3-3.3.4 собирается "с полной боевой выкладкой": собирается сначала gcc 3.3.x, затем с его помощью собирается libstdc++, после чего сам gcc 3.3.x выбрасывается. Впрочем там есть такой код:

```

        # and on x86, we just need to filter the 3.4 specific amd64 -marchs

        replace-cpu-flags k8 athlon64 opteron x86-64

        # gcc 3.3 doesn't support -march=pentium-m

        replace-cpu-flags pentium-m pentium3m pentium3

        #GCC 3.3 does not understand G3, G4, G5 on ppc

        replace-cpu-flags G3 750

        replace-cpu-flags G4 7400

        replace-cpu-flags G5 7400

```

то есть руками править CFLAGS для этого пакета не нужно - это уже сто лет назад пофиксили, а я и не заметил  :Sad: .

----------

## YD

(: Ну это само собой. Мы же не говорим конкретно о самой либе. А об ebuild'e. Чтобы его собрать не требуется установленного GCC3.3.

----------

## 3BEPb

Сделал как написано здесь:

http://gentoo-wiki.com/HOWTO_Migrate_to_GCC_3.4

Те. установил новый и полностью удалил старый компилятор.

Потом

emerge -e system && emerge -e world

Всё собралось без вопросов.

А ну да, у меня так

CFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"

CHOST="i686-pc-linux-gnu"

CXXFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"

MAKEOPTS="-j2"

Причём теже флаги стоят с самого начала, с первого стейджа. С компилятором 3.3.5.

----------

## Metallic

Да, но если флаги изменятся, т.е. gcc 3.3.x pentium-m не поддерживается, а в 3.4.x поддерживается то возникает куча нюансов.

----------

## 3BEPb

 *Metallic wrote:*   

> Да, но если флаги изменятся, т.е. gcc 3.3.x pentium-m не поддерживается, а в 3.4.x поддерживается то возникает куча нюансов.

 

Хммм, каких нюансов именно?

Насколько я помню раньше было mcpu=cputype теперь стало march=cputype .

В любом случае придёться world пересобирать, что-бы было всё корректно.

Что касаемо стабильности сабжа то я ещё неделю назад сидел на Слаквари, весь гуи которого был собран 3.4.х, со стабильностью было всё в полном порядке, начиная с 3.4.0 , те. примерно пол года.

----------

## Metallic

 *3BEPb wrote:*   

>  *Metallic wrote:*   Да, но если флаги изменятся, т.е. gcc 3.3.x pentium-m не поддерживается, а в 3.4.x поддерживается то возникает куча нюансов. 
> 
> Хммм, каких нюансов именно?
> 
> Насколько я помню раньше было mcpu=cputype теперь стало march=cputype .
> ...

 

gcc 3.3.x не знает что такое pentium-m, а gcc 3.4.x знает. Поэтому возникает много неудобств.

----------

## 3BEPb

Этт то как раз всё понятно, мне непонятно как это повлияет на стабильность системы? Ну собрано одно одним, другое другим и черт с ним %) и ладно.

Те. меня интересуют именно эти нюансы которые могут повлиять на систему в целом.

----------

## YD

 *3BEPb wrote:*   

> 
> 
> Насколько я помню раньше было mcpu=cputype теперь стало march=cputype .
> 
> 

 

чего чего? Было -mcpu стало -march ?

Может было -mcpu стало -mtune ? Но обратная совместимость вроде осталось + -march как был так и остался.

----------

## Laitr Keiows

У меня такая же проблемы была: хочет ставиться 3.3 и все! Вылечил так:

```
echo =sys-libs/libstdc++-v3-3.3.3-r1 ~x86 >> /etc/portage/package.keywords
```

http://gentoo-portage.com/sys-libs/libstdc++-v3

 *Quote:*   

> Compatibility package for running binaries linked against a pre gcc 3.4 libstdc++

 

----------

