64-битная ошибка? - PullRequest
       10

64-битная ошибка?

2 голосов
/ 05 мая 2009

перемещение усечено до соответствия: R_X86_64_PC32 против `.bss '

Я получаю эту ошибку компоновщика в g ++ при компиляции:

Остальная часть кода не является существенной, так как это определение нарушает мою компиляцию. Функция времени находится в sys / time.h. Скомпилировано на 64-битном RHEL.

 long ntime() {

     struct timeval tp;

     gettimeofday(&tp, (struct timezone *)0);
     return (tp.tv_sec*1000 + tp.tv_usec / 1000);
 }

Скажите, почему это не так?

Заранее спасибо.

1 Ответ

6 голосов
/ 05 мая 2009

Не уверен, почему происходит ошибка компоновщика, но есть ли какая-то конкретная причина для того, чтобы сделать struct timeval статической? Сделать его локальным так же быстро и сделать вашу функцию поточно-ориентированной, сохраняя пространство кучи (ну, bss).

Редактировать: вот проблема. Вы превысили 2 ГБ в пространстве статической кучи. Сделайте часть этого динамически распределенной или измените модель памяти. В gcc это может быть сделано передачей -mcmodel = medium и должно использоваться во всех объектных файлах. Однако это может несколько увеличить накладные расходы.

...