ΕΕΛ/ΛΑΚ - Λίστες Ταχυδρομείου

Re: Gcc 4.6 (Ubuntu)

On Monday 03 October 2011 18:09:28 Konstantinos Margaritis wrote:
> On Monday 03 October 2011 07:07:29 Nick Kossifidis wrote:
> > Και ξαναρωτάω γιατί πραγματικά δε πιστεύω ότι γράφω Κινέζικα, πού
> > ακριβώς λέω ότι φταίει κάτι/κάποιος ? Απλά ρωτάω αν έχετε δει κάτι
> > αντίστοιχο ! Έστω ότι έχω memory corrupting bug, γιατί στον 4.4.6 και
> > στον 4.5.2 δε φαίνεται και όλα δουλεύουν μια χαρά και φαίνεται στον
> > 4.6 ?
> 
> Μόνο τον τελευταίο μήνα έκανα report 4 Internal Compiler Errors του gcc
> 4.6, στο Debian -που μοιάζει με του Ubuntu καθώς χρησιμοποιούν αμφότερα το
> gcc- linaro tree τουλάχιστον σε ARM στο οποίο δουλεύω- μαζί με τα minimal
> testcases τους, οπότε ναι μην αγχώνεσαι, είναι συνηθισμένο. Σε σχέση με
> τον 4.4, και λιγότερο με τον 4.5, ο 4.6 είναι πολύ buggy ακόμη, δεν είναι
> τυχαίο που πολλά σοβαρά projects έχουν μείνει ακόμη σε 4.4.
> Πάντως, βάζεις μαζί ldflags και cflags σε object creation, καλύτερα
> διαχώρισέ τα. Δηλαδή, όταν παράγεις το .ο, τα $ldflags είναι αχρηστα. Και
> έχε υπόψιν σου ότι το Ubuntu χρησιμοποιεί gold ως linker οπότε και εκεί
> αλλάζουν αρκετά.

Μάλλον βιάστηκα. Δεν χρησιμοποιεί gold, αλλά τα πακέτα απαιτείται να γίνονται 
σωστά build με gold. Επίσης, ίσως βρήκα μια ερμηνεία για το πρόβλημα που 
συναντάς:

Από το:

http://lists.debian.org/debian-devel-announce/2011/02/msg00011.html

Fix build failures with ld --as-needed
- --------------------------------------

[Note this is not turned on by default]

Many packages fail to build when the linker is passed --as-needed as the
default.  These issues are collected at [4] (please tag new issues 
accordingly).
 The vast majority of these kind of failures are some assumptions about link
order with the GNU linker (ld), which may not be fulfilled with other linkers.
Issues are of the form:

  gcc -o foo -lbar foo.o

When processing the command line, libbar isn't needed to fulfil any
dependencies, so it is ignored, and the link step will fail when trying to
resolve symbols found in foo.o. The fix is to pass object files before 
libraries
on the command line:

  gcc -o foo foo.o -lbar

A common mistake with automake is to add libraries to the various LDFLAGS
macros.  If you need to link a program with a library, add this library to one
of the LDADD macros, if you need to link a library with a library, add to one 
of
the LIBADD macros.  For tracking dependencies with local libraries, you may 
need
add the library to one of the DEPENDENCIES macros.  See the automake manual 
for
more details.

Ελπίζω να σε καλύπτει.

Κώστας

απαντήσεις

αναφορές

πλοήγηση μηνυμάτων