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にgcc4.1以降が表示されない場合は、命令がありません。

Xcode 3(Leopardにあるもの)はgcc 4.2に同梱されていますが、デフォルトのコンパイラーは4.0であり、命令がありません。

ユキヒョウでテストしたところ、デフォルトのgccは4.2.1で、動作します。

注を参照してください:Mac OSXLeopardのデフォルトコンパイラとしてGCC4.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 に答える