Как использовать встроенную gcc __sync_bool_compare_and_swap в g ++ на MacOSX? - PullRequest
0 голосов
/ 22 января 2010

У меня есть код, который использует:

__sync_bool_compare_and_swap

нормально компилируется в Linux.

Но когда я пытаюсь скомпилировать его на MacOSX в g ++, я получаю:

error: ‘__sync_bool_compare_and_swap’ was not declared in this scope

Как мне это исправить? (Это Mac OSX 10.5.8, так что это Intel ... и должна иметь эту инструкцию).

Спасибо!

Ответы [ 7 ]

5 голосов
/ 22 января 2010

Попробуйте добавить параметр командной строки

-march=i686

компоновщику.

5 голосов
/ 22 января 2010

Если вы не можете его найти, вы можете использовать OSCompareAndSwap () на Mac.

Но было бы неплохо иметь кроссплатформенный код, не так ли.

2 голосов
/ 22 января 2010

если gcc --version не показывает gcc 4.1 или новее, то у вас нет инструкции.

Xcode 3 (что на Leopard) поставляется с gcc 4.2, но компилятором по умолчанию является 4.0, в котором нет инструкции

Я только что протестировал его на снежном барсе, и gcc по умолчанию - 4.2.1, где он работает.

См. Примечание: Настройка GCC 4.2 в качестве компилятора по умолчанию в Mac OS X Leopard

1 голос
/ 22 января 2010

Какие версии GCC вы используете? (На обеих платформах). Это относительно недавнее дополнение к GCC.

0 голосов
/ 07 ноября 2016

символ __sync_bool_compare_and_swap включен в набор инструментов (gcc / g ++ и другие компиляторы) и связан с версией.

иногда вы найдете это так: ./arm-fsl-linux-gnueabi/4.6.2/lib/gcc/arm-fsl-linux-gnueabi/4.6.2/plugin/include/sync-builtins.def: "__sync_bool_compare_and_swap", ./arm-fsl-linux-gnueabi/4.6.2/lib/gcc/arm-fsl-linux-gnueabi/4.6.2/plugin/include/sync-builtins.def: "__sync_bool_compare_and_swap_1", ./arm-fsl-linux-gnueabi/4.6.2/lib/gcc/arm-fsl-linux-gnueabi/4.6.2/plugin/include/sync-builtins.def: "__sync_bool_compare_and_swap_2", ./arm-fsl-linux-gnueabi/4.6.2/lib/gcc/arm-fsl-linux-gnueabi/4.6.2/plugin/include/sync-builtins.def: "__sync_bool_compare_and_swap_4", ./arm-fsl-linux-gnueabi/4.6.2/lib/gcc/arm-fsl-linux-gnueabi/4.6.2/plugin/include/sync-builtins.def: "__sync_bool_compare_and_swap_8", ./arm-fsl-linux-gnueabi/4.6.2/lib/gcc/arm-fsl-linux-gnueabi/4.6.2/plugin/include/sync-builtins.def: "__sync_bool_compare_and_swap_16",

0 голосов
/ 22 января 2010

OSAtomicAdd32 в libkern / OSAtomic.h

0 голосов
/ 22 января 2010

Похоже, в вашей коробке нет той библиотеки, которую вы использовали в Linux, которая использует эту функцию.

(функция оборачивает инструкцию)

...