2009-05-05 2 views
2

перемещение усекается: R_X86_64_PC32 против `.bss'Ошибка 64 бит?

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

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

long ntime() { 

    struct timeval tp; 

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

Скажите, пожалуйста, почему это неправильно?

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

ответ

6

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

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

+0

Это хороший момент, вероятно, ошибка, с которой я столкнулся позже. С тех пор я исправил это (хотя ошибка сохраняется), и причина, по которой она была статичной, была просто потому, что я переношу это в потоковое приложение из приложения MPI. – Sam

+0

Ты, мой друг, балет. – Sam