如何在 MacOSX 上的 g++ 中使用 gcc 内置 __sync_bool_compare_and_swap?
Posted
技术标签:
【中文标题】如何在 MacOSX 上的 g++ 中使用 gcc 内置 __sync_bool_compare_and_swap?【英文标题】:How do I use gcc builtin __sync_bool_compare_and_swap in g++ on MacOSX? 【发布时间】:2010-01-22 17:05:54 【问题描述】:我有一些代码使用:
__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 .. .应该有这个指令)。
谢谢!
【问题讨论】:
【参考方案1】:尝试添加命令行选项
-march=i686
到链接器。
【讨论】:
【参考方案2】:如果找不到,可以在 Mac 上使用 OSCompareAndSwap()。
但如果有跨平台代码就好了,不是吗。
【讨论】:
【参考方案3】:如果 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
【讨论】:
【参考方案4】:您使用的是什么版本的 GCC? (在两个平台上)。这是 GCC 的一个相对较新的补充。
【讨论】:
【参考方案5】:猜测一下,您的机器上没有您在 Linux 上使用的使用该功能的库。
(函数包装指令)
【讨论】:
【参考方案6】:libkern/OSAtomic.h 中的 OSAtomicAdd32
【讨论】:
【参考方案7】:符号__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",
【讨论】:
以上是关于如何在 MacOSX 上的 g++ 中使用 gcc 内置 __sync_bool_compare_and_swap?的主要内容,如果未能解决你的问题,请参考以下文章