# (gelöst) mehrere Fehler beim Compilieren

## testbench

vorab: zwar habe ich einige Jahre Linux-Administration auf dem Buckel, aber gentoo ist gerade frisch, wollte es mal austesten, ob ich damit glücklicher werde, was aber auch heißt, daß ich noch nicht alle Kniffe kenne.

habe also mal stage3-amd64-20110908 + portage-20110909 heruntergeladen, installiert, kernel gebaut, läuft soweit.

1. Problem:

ich arbeite auf der Konsole vorrangig mit vi bzw. i.d.R. mit vim.

"emerge vim" resultiert in einem Fehler, bei dem das configure des Pakets vim-core-7.3.189  mit der Meldung:

```

checking for tgetent()... configure: error: NOT FOUND!

      You need to install a terminal library; for example ncurses.

      Or specify the name of the library with --with-tlib.

```

abbricht.

sicherheitshalber mal mittels "emerge ncurses" dieses installiert: Fehler bleibt.

ein "emerge -ud world" bringt auch keine Änderung.

2. Problem:

um nun etwaige fehlerhaften Abhängigkeiten durch Unstimmigkeiten bzgl. stage3 zu lösen, ein "emerge -e world" hinterhergeschickt. Das kommt aber nicht weit, bleibt beim Paket patch-2.5.9 hängen:

```

error.c: In function 'print_errno_message':

error.c:150: error: implicit declaration of function 'strerror_r'

error.c:150: warning: assignment makes pointer from integer without a cast

error.c: In function 'error_at_line':

error.c:339: error: implicit declaration of function 'strcmp'

make: *** [error.o] Error 1

```

3. Problem:

wenn ich nun noch ein "--exclude patch" anhänge, geht es erstmal wieder weiter, bleibt dann bei gmp-5.0.2 hängen:

```

checking whether x86_64-pc-linux-gnu-gcc is gcc... yes

checking compiler x86_64-pc-linux-gnu-gcc -O6 -Wall -Werror-implicit-function-declaration ... no, long long reliability test 1

configure.wrapped: error: could not find a working compiler, see config.log for details

```

4. Problem:

also auch noch gmp excluded, bis er dann bei flex-2.5.35 hängen bleibt:

```

if x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I. -I.  -DLOCALEDIR=\"/usr/share/locale\" -I./intl   -O6 -Wall -Werror-implicit-function-declaration -MT scanflags.o -MD -MP -MF ".deps/scanflags.Tpo" -c -o scanflags.o scanflags.c; \

then mv -f ".deps/scanflags.Tpo" ".deps/scanflags.Po"; else rm -f ".deps/scanflags.Tpo"; exit 1; fi

In file included from dfa.c:32:

flexdef.h:446: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token

In file included from ccl.c:34:

flexdef.h:446: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token

flexdef.h:746: error: expected ')' before '*' token

flexdef.h:746: error: expected ')' before '*' token

```

usw. (etliche Zeilen Fehlermeldungen des Compilers)

letzteres dürfte irgendeine fehlende Header-Definition sein, ist aber auch nicht wirklich wichtig, denke ich.

weiter habe ich es nicht mehr getestet, da das Kommando jedesmal die 150 Pakete erneut beginnt durchzugehen.

Meine Vermutung ist, daß da was in den Abhängigkeiten ziemlich schräg liegt, aber das emerge läßt mich da ja nicht wirklich hineinschauen...

um auszuschließen, daß etwaige Aktionen von mir da was vergeigt haben, habe ich die beiden oben angegebenen stage/portage-Pakete nochmal in ein frisches Verzeichnis entpackt und ein "emerge vim" gestartet, was aber ebenso in dem zu oberst beschriebenen Fehler mündet.

theoretisch würde ich mich ja daran machen, die auftretenden Fehler zu fixen, aber da ich nicht weiß, wie ich das emerge unterbrechen kann und wieder aufsetzen kann, sind mir da ziemlich die Hände gebunden, zumindest habe ich keine solche Option gefunden.

vielleicht ist es aber auch sinnvoller, das prinzipiell zu lösen, da mir ein wenig die Zeit fehlt, um bis zur vollständigen Installation des Rechners alle paar Pakete mal Hand anlegen zu müssen, denn dann braucht's ja eigtl. keine Distribution, sondern mensch kann gleich die Sourcen nehmen.

Für Tips, die zur Lösung führen, bin ich dankbar.

testbench

(edit: die Ausgaben mal etwas separiert und das ganze damit hoffentlich etwas lesbarer gemacht)

(edit2: auf gelöst gesetzt)Last edited by testbench on Mon Sep 12, 2011 9:19 am; edited 2 times in total

----------

## John R. Graham

Moved from Installing Gentoo to Deutsches Forum (German).

- John

----------

## franzf

Wie hast du installiert? Handbuch hast du schon gelesen?

Was sagt

```
emerge --info
```

Du musst irgend nen größeren Bock geschossen haben, denn seit Ewigkeiten ist ncurses eine Abhängigkeit von vim (über die vim.eclass).

 *Quote:*   

> configure.wrapped: error: could not find a working compiler

 

```
gcc-config -l
```

 wäre nett  :Smile: 

----------

## Treborius

 *testbench wrote:*   

> 
> 
> weiter habe ich es nicht mehr getestet, da das Kommando jedesmal die 150 Pakete erneut beginnt durchzugehen.
> 
> .
> ...

 

emerge --resume --skipfirst

----------

## testbench

 *franzf wrote:*   

> Wie hast du installiert? Handbuch hast du schon gelesen?

 

sicherlich nicht komplett gelesen, aber ohne es Schritt für Schritt durchzugehen, erscheint mir eine gentoo-Installation für Neulinge unmöglich. Demnach wurde es entsprechend des Handbuchs installiert, wie ich schon beschrieben habe: stage3 + portage entpackt, etc...

 *franzf wrote:*   

> 
> 
> Was sagt
> 
> ```
> ...

 

ich nahm an, daß es vielleicht ausreichen würde, die verwendeten stage+portage-Pakete zu benennen, da es sich ja um ein frisches System handelt...

```

Portage 2.1.10.11 (default/linux/amd64/10.0, gcc-4.4.5, glibc-2.12.2-r0, 2.6.39-gentoo-r3 x86_64)

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

System uname: Linux-2.6.39-gentoo-r3-x86_64-Intel-R-_Core-TM-_i7-2720QM_CPU_@_2.20GHz-with-gentoo-2.0.3

Timestamp of tree: Sat, 10 Sep 2011 00:45:01 +0000

app-shells/bash:          4.1_p9

dev-lang/python:          2.7.1-r1, 3.1.3-r1

sys-apps/baselayout:      2.0.3

sys-apps/openrc:          0.8.3-r1

sys-apps/sandbox:         2.4

sys-devel/autoconf:       2.68

sys-devel/automake:       1.11.1

sys-devel/binutils:       2.21.1-r1

sys-devel/gcc:            4.4.5

sys-devel/gcc-config:     1.4.1-r1

sys-devel/libtool:        2.4-r1

sys-devel/make:           3.82-r1

sys-kernel/linux-headers: 2.6.36.1 (virtual/os-headers)

sys-libs/glibc:           2.12.2

Repositories: gentoo

ACCEPT_KEYWORDS="amd64"

ACCEPT_LICENSE="* -@EULA"

CBUILD="x86_64-pc-linux-gnu"

CFLAGS="-O6 -Wall -Werror-implicit-function-declaration"

CHOST="x86_64-pc-linux-gnu"

CONFIG_PROTECT="/etc"

CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/gconf /etc/gentoo-release /etc/sandbox.d /etc/terminfo"

CXXFLAGS="-O2 -pipe"

DISTDIR="/usr/portage/distfiles"

FEATURES="assume-digests binpkg-logs distlocks ebuild-locks fixlafiles fixpackages news parallel-fetch protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch"

FFLAGS=""

GENTOO_MIRRORS="http://distfiles.gentoo.org"

LDFLAGS="-s"

PKGDIR="/usr/portage/packages"

PORTAGE_CONFIGROOT="/"

PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages"

PORTAGE_TMPDIR="/var/tmp"

PORTDIR="/usr/portage"

PORTDIR_OVERLAY=""

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

USE="acl amd64 berkdb bzip2 cli cracklib crypt cups cxx dri fortran gdbm gpm iconv ipv6 mmx modules mudflap multilib ncurses nls nptl nptlonly openmp pam pcre perl pppd python readline session sse sse2 ssl sysfs tcpd unicode xorg zlib" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol" APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="kexi words flow plan stage tables krita karbon braindump" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ubx" INPUT_DEVICES="keyboard mouse evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" PHP_TARGETS="php5-3" RUBY_TARGETS="ruby18" USERLAND="GNU" VIDEO_CARDS="fbdev glint intel mach64 mga neomagic nouveau nv r128 radeon savage sis tdfx trident vesa via vmware dummy v4l" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account"

Unset:  CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LANG, LC_ALL, LINGUAS, MAKEOPTS, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS

```

 *franzf wrote:*   

> 
> 
> Du musst irgend nen größeren Bock geschossen haben, denn seit Ewigkeiten ist ncurses eine Abhängigkeit von vim (über die vim.eclass).
> 
> 

 

nun, grundsätzlich natürlich nicht auszuschließen, aber um genau das auszuschließen, habe ich ja extra nochmals getestet (wie ich schon schrieb), ob eine frische Installation das gleiche macht. Zudem ist ncurses allein schon dadurch installiert, daß vorher der kernel mittels "make menuconfig" konfiguriert wurde (was mir aber auch erst später klar wurde). Liegt ja im stage-Paket schon vor.

 *franzf wrote:*   

> configure.wrapped: error: could not find a working compiler
> 
> ```
> gcc-config -l
> ```
> ...

 

nun, da sowohl kernel, grub, sowie durch das "emerge -e" sicher 60-70 andere Pakete ohne Probleme compiliert werden konnten, wird es wohl eher nicht daran liegen. configure wirft obigen Fehler gerne mal, wenn es Compiler-Optionen nimmt, die letztlich zu für das lokale System falsch gelinkten Programmdateien führen.

```
 [1] x86_64-pc-linux-gnu-4.4.5 * 
```

----------

## testbench

 *Treborius wrote:*   

>  *testbench wrote:*   
> 
> weiter habe ich es nicht mehr getestet, da das Kommando jedesmal die 150 Pakete erneut beginnt durchzugehen.
> 
> .
> ...

 

danke, aber wie kann ich die dann möglicherweise händisch gefixten Sachen wieder anstarten?

----------

## astaecker

 *testbench wrote:*   

> 
> 
> ```
> CFLAGS="-O6 -Wall -Werror-implicit-function-declaration"
> ```
> ...

 

Das ist sicherlich falsch. Ich kenne maximal -03 und das ist schon experimentell.

----------

## Treborius

ein paar sachen machen mich an deinem emerge--info stutzig :

```

CFLAGS="-O6 -Wall -Werror-implicit-function-declaration" 

```

-O6 ??? und warum -Werror-implicit-function-declaration, willst du solche flags explizit drin haben?

```

LDFLAGS="-s" 

```

ist --as-needed nicht als standard drin, und was ist "-s" ???

kannst du mal deine make.conf posten?

----------

## franzf

i7-2720QM   :Shocked: 

300irgendwas-Kröten-CPU, und dann nicht optimieren?

Ich würde sagen, wenn du deine kleinen Problemchen gelöst hast, stellst du march auf native und machst ein emerge -e world, damit du auch alles aus deinem Prozzi rausholst (>gcc-4.6 können auch AVX, weiß aber nicht ob das schon so toll funktioniert).

Und CXXFLAGS komplett unabhängig von CFLAGS konfigurieren macht man auch recht selten. Im Handbuch steht auch CXXFLAGS="${CFLAGS}".

Vllt. solltest du dir für die Installation einfach mal Zeit nehmen, und das was im Handbuch steht auch durchlesen. Es ist zwar immer möglich, dass die stages defekt sind, aber normal ist es nicht und in deinem Fall nehem ich auch an, dass der Fehler nicht im stage liegt.

Von wo hast du eigentlich die Installation ausgeführt? LiveCD? Andere Installation? Du hast ja ein 64Bit-Gentoo gewählt, welche Architektur hatte das Linux, von dem aus du installiert hast?

----------

## testbench

 *Treborius wrote:*   

> ein paar sachen machen mich an deinem emerge--info stutzig :
> 
> ```
> 
> CFLAGS="-O6 -Wall -Werror-implicit-function-declaration" 
> ...

 

das -O6 ist in irgendeinem Projekt mal aufgetaucht und hat sich dann im .profile verewigt. der gcc interpretiert das aktuell als -O3. 

das -Werror-implicit-function-declaration ist im Rahmen verschiedener Probleme mit dirty c-Code in 64bit-Systemen aufgetaucht.

wenn da eine Funktion nicht deklariert ist, bevor sie aufgerufen wird, dann wird als Rückgabewert "int" angenommen, was je nach Maschine unterschiedlich ist. auf der damaligen 64bit-Maschine sind aber in jedem Fall die Pointer 64bittig gewesen und dann knallte es immer mal, weil der Compiler aufgrund fehlender Deklaration den 64bit-pointer auf eine 32bit-int reduzierte (um die dann wieder an den pointer zuzuweisen). Wenn dann so Code eh schon zig Warnungen ausspuckt, dann überliest mensch sowwas dann auch schon mal, deswegen diese Option, damit er dann abbricht.

ich hatte die aber schon nahezu wieder vergessen, steht halt im .profile drin (wie auch die andere)

also mal entfernt und siehe da: vim compiliert.

jetzt könnte mensch natürlich 'ne Grundsatzdiskussion lostreten, ob das nun ein Bug vom configure ist (was ich so sehen würde), oder ob das Setzen einer solchen Option per default sinnvoll ist (was ich bisher auch so gesehen habe), aber ...

[quote="Treborius"]

```

LDFLAGS="-s" 

```

ist --as-needed nicht als standard drin, und was ist "-s" ???

[/code]

-s strippt etwaige Symbole aus den Binaries und macht sie damit kleiner. Solange ein Programm nicht mittels "gcc -g" compiliert wurde, kann der gdb mit den Symbolen eh nicht wirklich viel anfangen und je nach Programm bläht sich das schon mal um Faktor 2-5 auf...

 *Treborius wrote:*   

> 
> 
> kannst du mal deine make.conf posten?

 

die ist virgin:

```

# These settings were set by the catalyst build script that automatically

# built this stage.

# Please consult /usr/share/portage/config/make.conf.example for a more

# detailed example.

CFLAGS="-O2 -pipe"

CXXFLAGS="${CFLAGS}"

# WARNING: Changing your CHOST is not something that should be done lightly.

# Please consult http://www.gentoo.org/doc/en/change-chost.xml before changing.

CHOST="x86_64-pc-linux-gnu"

# These are the USE flags that were used in addition to what is provided by the

# profile used for building.

USE="mmx sse sse2"

```

was mich hier irritiert: da sind zwar explizit CFLAGS gesetzt, aber dennoch werden die aus dem Environment genommen.

Vielleicht wäre es sinnvoll (um solche Probleme wie hier zu vermeiden), wenn emerge da zumindest eine deutliche Warnung ausgeben würde?

Nun gut.

ich danke Euch für die Rückmeldungen, denn vermutlich hätte ich noch 20x da drauf starren können, ohne darin ein potentielles Problem zu sehen.

----------

## franzf

 *testbench wrote:*   

> ich hatte die aber schon nahezu wieder vergessen, steht halt im .profile drin (wie auch die andere)
> 
> also mal entfernt und siehe da: vim compiliert.

 

Gut. Aber das muss doch dann im .profile vom root gestanden haben - und das wiedrum sagt, dass du als root gearbeitet hast. Jedenfalls an dem Projekt, und das ist - naja...

Und Projekte haben üblicherweise Makefiles, die man bearbeiten und solche Flags lokal einfügen kann.

 *Quote:*   

> -s strippt etwaige Symbole aus den Binaries und macht sie damit kleiner. Solange ein Programm nicht mittels "gcc -g" compiliert wurde, kann der gdb mit den Symbolen eh nicht wirklich viel anfangen und je nach Programm bläht sich das schon mal um Faktor 2-5 auf...

 

 *http://www.gentoo.org/proj/en/qa/backtraces.xml wrote:*   

> By default Portage strips binaries.

 

Du kannst die debugausgaben auch splitten, siehe FEATURES-Section in man make.conf.

-s in den LDFLAGS ist also nicht notwendig.

----------

## testbench

 *franzf wrote:*   

> 
> 
>  *testbench wrote:*   ich hatte die aber schon nahezu wieder vergessen, steht halt im .profile drin (wie auch die andere)
> 
> also mal entfernt und siehe da: vim compiliert. 
> ...

 

ohne das jetzt noch übermäßig ausdehnen zu wollen: ja, wenn ich einen Rechner frisch aufsetze, dann tue ich das und weil ich tendenziell bequem bin, gibt es dort nahezu gleiche settings, wie ich sonst auch nutze. Das Aufsetzen eines Rechners hat aber dann doch relativ wenig mit dem Arbeiten an einem solchen zu tun.

 *franzf wrote:*   

> 
> 
> Und Projekte haben üblicherweise Makefiles, die man bearbeiten und solche Flags lokal einfügen kann.
> 
> 

 

nun, wenn es dann doch zum x-ten mal wieder knallt, weil mensch es dann doch wieder vergessen hat, explizit zu setzen, dann finde ich es normal, das zentral zu setzen, zumal es in den bisherigen Umgebungen auch nie zu einem Problem damit kam. Nun habe ich mich auf die Automatismen von gentoo eingelassen und dabei eben einen eigenen "Automatismus" vergessen, zuvor zu deaktivieren. Dumm gelaufen. Hat mich nun auch das gesamte Wochenende gekostet, was mich das nächste mal in ähnlicher Situation vielleicht eher mal darauf bringt, auch eine virgin-shell zu nutzen.

 *franzf wrote:*   

> 
> 
>  *Quote:*   -s strippt etwaige Symbole aus den Binaries und macht sie damit kleiner. Solange ein Programm nicht mittels "gcc -g" compiliert wurde, kann der gdb mit den Symbolen eh nicht wirklich viel anfangen und je nach Programm bläht sich das schon mal um Faktor 2-5 auf... 
> 
>  *http://www.gentoo.org/proj/en/qa/backtraces.xml wrote:*   By default Portage strips binaries. 
> ...

 

Nun, ich habe LDFLAGS+CFLAGS jetzt erstmal im Environment gelöscht und werde nach und nach schauen, welche Eingriffsmöglichkeiten ich da habe. Das vermutlich wichtigste wird für mich sein, das eine oder andere Paket vor der Installation zu modifizieren, was wohl infolge der Automatismen von emerge leider nicht ganz trivial zu sein scheint, denn das war eigentlich der wesentliche Anlaß, gentoo auszuprobieren: sicher zu sein, Zugriff auf exakt die Sourcen zu haben, die verwendet werden. Das ist aber ggfls. ein Thema für einen anderen Thread.

----------

## Treborius

 *testbench wrote:*   

> 
> 
> Nun, ich habe LDFLAGS+CFLAGS jetzt erstmal im Environment gelöscht und werde nach und nach schauen, welche Eingriffsmöglichkeiten ich da habe. Das vermutlich wichtigste wird für mich sein, das eine oder andere Paket vor der Installation zu modifizieren, was wohl infolge der Automatismen von emerge leider nicht ganz trivial zu sein scheint, denn das war eigentlich der wesentliche Anlaß, gentoo auszuprobieren: sicher zu sein, Zugriff auf exakt die Sourcen zu haben, die verwendet werden. Das ist aber ggfls. ein Thema für einen anderen Thread.

 

naja, aber ich würde das klar trennen

1. das system, mit dem du arbeitest (und da solltest du nur triviale flags verwenden)

2. die packete an denen du wirklich rumoptimierst 

==> siehe dir mal local-overlays an, das wäre die sauberste möglichkeit mit packeten rumzuexperimentieren

global irgendwelche flags zu setzen macht imho kein sinn (da sie auch von der community und den devels nicht getestet werden)

----------

