Błąd łącza podczas kompilacji operacji atomowej gcc w trybie 32-bitowym

Mam następujący program:

~/test> cat test.cc
int main()
{
  int i = 3;
  int j = __sync_add_and_fetch(&i, 1);
  return 0;
}

Kompiluję ten program za pomocą GCC 4.2.2 na Linuksie działającym na 64-bitowej maszynie Intel z wieloma procesorami:

~/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

Kiedy kompiluję program w trybie 64-bitowym, kompiluje się i łączy dobrze:

~/test> /share/tools/gcc-4.2.2/bin/g++ test.cc
~/test>

Kiedy kompiluję go w trybie 32-bitowym, pojawia się następujący błąd:

~/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>

Chociaż nigdy nie będę działał na 32-bitowym procesorze, potrzebuję 32-bitowego pliku wykonywalnego, aby móc łączyć się z niektórymi bibliotekami 32-bitowymi.

Moje 2 pytania to:

Dlaczego otrzymuję błąd łącza podczas kompilacji w trybie 32-bitowym?

Czy jest jakiś sposób na skompilowanie i połączenie programu, a jednocześnie połączenie z biblioteką 32-bitową?

questionAnswers(2)

yourAnswerToTheQuestion