Ошибка соединения при компиляции атомарной операции gcc в 32-битном режиме

У меня есть следующая программа:

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

Я компилирую эту программу, используя GCC 4.2.2 для Linux, работающей на 64-битной машине Intel с несколькими процессорами:

~/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-битной библиотекой?

Ответы на вопрос(2)

Ваш ответ на вопрос