2010-01-22 67 views
0

我有一个使用一些代码:如何在MacOSX上使用g ++中的gcc内建__sync_bool_compare_and_swap?

__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,所以它是英特尔..,应该有这条​​指令)。

谢谢!

回答

5

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

但是,如果拥有跨平台的代码,不是很好。

0

猜测,你的盒子没有你在Linux上使用过的函数库。

(功能包装指令)

1

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

0

OSAtomicAdd32在libkern中/ OSAtomic.h

2

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

的Xcode 3(这是对豹)附带GCC 4.2,但是默认的编译器是4.0,它不具有指示

我只是测试了雪豹,默认的gcc是4.2 .1,它在哪里工作。

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

5

尝试添加命令行选项

-march=i686 

的链接。

-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”,