Domanda
trasferimento spostato per adattarsi: R_X86_64_PC32 contro `.bss '
Ricevo questo errore del linker in g ++ durante la compilazione:
Il resto del codice non è materiale poiché questa definizione interrompe la mia compilazione. La funzione time si trova in sys / time.h. Compilato su RHEL a 64 bit.
long ntime() {
struct timeval tp;
gettimeofday(&tp, (struct timezone *)0);
return (tp.tv_sec*1000 + tp.tv_usec / 1000);
}
Dimmi perché questo è sbagliato?
Grazie in anticipo.
Soluzione
Non sai perché si sta verificando l'errore del linker, ma c'è qualche motivo particolare per rendere statica la struttura temporale? Renderlo locale è altrettanto veloce e rende sicura la tua funzione thread, preservando allo stesso tempo lo spazio heap (bene, bss).
Modifica: ecco il problema. Hai superato 2 GB di spazio heap statico. Realizzane una parte allocata in modo dinamico o modifica il modello di memoria. In gcc questo può essere fatto passando -mcmodel = medium e deve essere usato su tutti i file oggetto. Questo può aumentare un po 'le spese generali, tuttavia.