2009-05-05 6 views
2

移転:コンパイル時に.bssの `に対するR_X86_64_PC3264ビットエラー?収まるように切り捨て

Iは、G ++でこのリンカエラーを取得しています:

この定義は私のコンパイルを壊すので、コードの残りの部分は重要ではありません。 time関数は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を静的にする特別な理由はありますか?それをローカルにすることは速くて、ヒープ(well、bss)スペースを節約しながら、関数をスレッドセーフにします。

編集:ここに問題があります。静的ヒープ領域で2GBを超えました。そのうちのいくつかを動的に割り当てるか、メモリモデルを変更してください。 gccでは、-mcmodel = mediumを渡すことでこれを行うことができ、すべてのオブジェクトファイルで使用する必要があります。しかし、これによりオーバーヘッドがいくらか増加する可能性があります。

+0

これは良い点です。おそらく後で遭遇するバグです。私はこれを修正して以来(エラーは残っていますが)、静的な理由は単にこれをMPIアプリケーションからスレッドアプリケーションに移植しているためです。 – Sam

+0

あなた、私の友人は、ボール選手です。 – Sam

関連する問題