我有以下程序:
~/test> cat test.cc
int main()
{
int i = 3;
int j = __sync_add_and_fetch(&i, 1);
return 0;
}
我在多 CPU 64 位 Intel 机器上运行的 Linux 上使用 GCC 4.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 位库。
我的两个问题是:
为什么在 32 位模式下编译时会出现链接错误?
有没有办法让程序编译和链接,同时仍然能够与 32 位库链接?