如何在MacOSX上的g ++中使用gcc builtin __sync_bool_compare_and_swap?

时间:2010-01-22 17:05:55

标签: c++ gcc assembly built-in

我有一些使用的代码:

__sync_bool_compare_and_swap

它在Linux上编译得很好。

但是当我尝试用g ++在MacOSX上编译时,我得到:

error: ‘__sync_bool_compare_and_swap’ was not declared in this scope

我该如何解决这个问题? (这是Mac OSX 10.5.8,所以它的英特尔......应该有这个指令)。

谢谢!

7 个答案:

答案 0 :(得分:5)

如果找不到,可以在Mac上使用OSCompareAndSwap()。

但是拥有跨平台代码会很好,不会。

答案 1 :(得分:5)

尝试添加命令行选项

-march=i686

到链接器。

答案 2 :(得分:2)

如果gcc --version没有显示gcc 4.1或更新版本,那么你没有指令。

Xcode 3(这是Leopard上的内容)附带gcc 4.2,但默认编译器是4.0,它没有指令

我刚刚在雪豹上测试过,默认的gcc是4.2.1,它的工作原理。

请参阅说明:Setting GCC 4.2 as the default compiler on Mac OS X Leopard

答案 3 :(得分:1)

您使用的是哪种版本的GCC? (在两个平台上)。这是GCC的一个相对新近的补充。

答案 4 :(得分:0)

猜测,你的盒子里没有你在Linux上使用该库的库。

(函数包装指令)

答案 5 :(得分:0)

libkern / OSAtomic.h中的OSAtomicAdd32

答案 6 :(得分:-2)

符号__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“,