私は次のプログラムを持っています:
~/test> cat test.cc
int main()
{
int i = 3;
int j = __sync_add_and_fetch(&i, 1);
return 0;
}
マルチCPU64ビットIntelマシンで実行されているLinuxでGCC4.2.2を使用してこのプログラムをコンパイルしています。
~/test> uname --all
Linux doom 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:56:44 EST 2007 x86_64 x86_64 x86_64 GNU/Linux
プログラムを64ビットモードでコンパイルすると、正常にコンパイルおよびリンクされます。
~/test> /share/tools/gcc-4.2.2/bin/g++ test.cc
~/test>
32ビットモードでコンパイルすると、次のエラーが発生します。
~/test> /share/tools/gcc-4.2.2/bin/g++ -m32 test.cc
/tmp/ccEVHGkB.o(.text+0x27): In function `main':
: undefined reference to `__sync_add_and_fetch_4'
collect2: ld returned 1 exit status
~/test>
実際に32ビットプロセッサで実行することはありませんが、いくつかの32ビットライブラリとリンクできるように、32ビットの実行可能ファイルが必要です。
私の2つの質問は次のとおりです。
32ビットモードでコンパイルするとリンクエラーが発生するのはなぜですか?
32ビットライブラリとリンクしながら、プログラムをコンパイルしてリンクする方法はありますか?