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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top