Verbindungsfehler beim Kompilieren der atomaren Operation gcc im 32-Bit-Modus

Ich habe folgendes Programm:

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

Ich kompiliere dieses Programm mit GCC 4.2.2 unter Linux, das auf einem 64-Bit-Intel-Computer mit mehreren CPUs ausgeführt wird:

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

Wenn ich das Programm im 64-Bit-Modus kompiliere, kompiliert und verknüpft es einwandfrei:

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

Wenn ich es im 32-Bit-Modus kompiliere, wird folgende Fehlermeldung angezeigt:

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

Obwohl ich niemals auf einem 32-Bit-Prozessor laufen werde, benötige ich eine ausführbare 32-Bit-Datei, um eine Verbindung mit einigen 32-Bit-Bibliotheken herstellen zu können.

Meine 2 Fragen sind:

Warum erhalte ich einen Linkfehler, wenn ich im 32-Bit-Modus kompiliere?

Gibt es eine Möglichkeit, das Programm zum Kompilieren und Verknüpfen zu bringen, während es weiterhin mit einer 32-Bit-Bibliothek verknüpft werden kann?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage