2015-02-24 6 views
7

mio programma viene compilato bene senza -flto ma con -flto ottengo questo errore:Come risolvere l'errore del linker "definito nella sezione scartata"?

% arm-none-eabi-g++ --version 
arm-none-eabi-g++ (4.8.3-9+11) 4.8.3 20140820 (release) 
Copyright (C) 2013 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

% arm-none-eabi-g++ -O2 -W -Wall -fPIE -flto -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16 -ffreestanding -nostdlib -std=gnu++11 -fno-exceptions -fno-rtti -c -o main.o main.cc 

% arm-none-eabi-g++ -fPIE -nostdlib -O2 -flto boot.o memcpy.o font.o main.o -lgcc -Tlink-arm-eabi.ld -o kernel.elf 
`memcpy' referenced in section `.text' of /tmp/ccYO5wE8.ltrans0.ltrans.o: defined in discarded section `.text' of memcpy.o (symbol from plugin) 
collect2: error: ld returned 1 exit status 

ho provato a spostare il memcpy.o diverse posizioni di provare diversi ordini di link, ma l'errore è sempre lo stesso. Ho visto che questo è un problema comune, ma nessuna delle risposte alle domande precedenti si applica. Non ho installato un boost rotto o non ho usato diverse versioni del compilatore per la compilazione. Sto costruendo un kernel bare metal quindi non c'è nessuna libreria esterna involuta diversa da libgcc.

Qualcuno ha un'idea di cosa sta succedendo lì?

+0

stesso errore si verifica con g ++ - 4.9.2 –

risposta

6

Questo sembra essere un bug del compilatore che è stato corretto in gcc-4.7 e reapeared in gcc-4.8 (gcc bugreport for 4.6, reapearance in 4.8). Una rapida soluzione consiste nel contrassegnare la funzione utilizzata:

void * memcpy(void *dest, const void *src, sizte_t n) __attribute__((used)); 
void * memcpy(void *dest, const void *src, size_t n) { 
    uint8_t *d = (uint8_t *)dest; 
    uint8_t *s = (uint8_t *)src; 
    while(n--) { 
    *d++ = *s++; 
    } 
    return dest; 
} 

Ciò impedisce all'ottimizzatore di ignorare la funzione. Grazie a Richard Biener per averlo suggerito.

Problemi correlati