如何在 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?的主要内容,如果未能解决你的问题,请参考以下文章

Mac OSX 上的 GCC——多个版本的 gcc

用于 GCC/G++ 的宏来区分 Linux 和 Mac OSX?

Mac OS X 上的 GCC 标志 -Os 来自哪里?

Mac OS X 上的 GCC 7 找不到 C++ 标准库

如何在 Mac OS X 下AA,安装 gcc

MAC OS X 10.8 上的 gcc 4.8 抛出“架构 x86_64 的未定义符号:”