我有一些代码使用:
__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 ......并且应该有这个指令)。
谢谢!
尝试添加命令行选项
-march=i686
到链接器。
如果找不到,可以在 Mac 上使用 OSCompareAndSwap()。
但是拥有跨平台代码会很好,不是吗。
如果 gcc --version 没有显示 gcc 4.1 或更高版本,那么您没有说明。
Xcode 3(这是 Leopard 上的)附带 gcc 4.2,但默认编译器是 4.0,它没有指令
我刚刚在雪豹上测试过,默认的gcc是4.2.1,在这个地方可以工作。
你使用的是什么版本的 GCC?(在两个平台上)。这是 GCC 的一个相对较新的补充。
猜测一下,您的机器没有您在 Linux 上使用的使用该功能的库。
(函数包装指令)
libkern/OSAtomic.h 中的 OSAtomicAdd32
符号 __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”,