0

我有一些代码使用:

__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 ......并且应该有这个指令)。

谢谢!

4

7 回答 7

6

尝试添加命令行选项

-march=i686

到链接器。

于 2010-01-22T17:32:56.890 回答
5

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

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

于 2010-01-22T17:31:11.693 回答
2

如果 gcc --version 没有显示 gcc 4.1 或更高版本,那么您没有说明。

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

我刚刚在雪豹上测试过,默认的gcc是4.2.1,在这个地方可以工作。

请参阅注释:在 Mac OS X Leopard 上将 GCC 4.2 设置为默认编译器

于 2010-01-22T17:31:59.407 回答
1

你使用的是什么版本的 GCC?(在两个平台上)。这是 GCC 的一个相对较新的补充。

于 2010-01-22T17:12:24.303 回答
0

猜测一下,您的机器没有您在 Linux 上使用的使用该功能的库。

(函数包装指令)

于 2010-01-22T17:09:28.170 回答
0

libkern/OSAtomic.h 中的 OSAtomicAdd32

于 2010-01-22T17:29:11.463 回答
-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”,

于 2016-11-07T13:43:11.840 回答