我有一些使用的代码:
__sync_bool_compare_and_swap
它在Linux上编译得很好。
但是当我尝试用g ++在MacOSX上编译时,我得到:
error: ‘__sync_bool_compare_and_swap’ was not declared in this scope
我该如何解决这个问题? (这是Mac OSX 10.5.8,所以它的英特尔......应该有这个指令)。
谢谢!
答案 0 :(得分:5)
如果找不到,可以在Mac上使用OSCompareAndSwap()。
但是拥有跨平台代码会很好,不会。
答案 1 :(得分:5)
尝试添加命令行选项
-march=i686
到链接器。
答案 2 :(得分:2)
如果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
答案 3 :(得分:1)
您使用的是哪种版本的GCC? (在两个平台上)。这是GCC的一个相对新近的补充。
答案 4 :(得分:0)
猜测,你的盒子里没有你在Linux上使用该库的库。
(函数包装指令)
答案 5 :(得分:0)
libkern / OSAtomic.h中的OSAtomicAdd32
答案 6 :(得分:-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“,