我正试图使用 gcc
的原子内置函数页面中的__atomic_load_n
,并使用以下编译器:
gcc -Wall -march=i686 -std=gnu99 ll.c -o ll
但它告诉我它无法执行
警告:隐式声明函数“__atomic_load_n”
我认为,提供arch
和march
标志(并通过设置std = gnu99
标志确保)足以向gcc
提供足够的信息,但是没有用。 实际上,即使我测试常见的__GCC_VERSION__
或__GNUC__
宏似乎也没有值...但是我的gcc
安装程序非常通用,就是Ubuntu中自带的那个。
我知道我正在做一些愚蠢的事情,但我想不出来到底是什么。 我有gcc(Ubuntu / Linaro 4.6.3-1ubuntu5)4.6.3
代码看起来像这样:这是一个从未被调用过的函数,因此问题出现在编译时。
type* func(type* p) {
type* q = __atomic_load_n (p, __ATOMIC_SEQ_CST);
}
type
定义为int
。如果你怀疑编译器安装存在问题,或许可以尝试使用它构建一个非平凡但干净的项目来查看会发生什么? - NPE__atomic_*
函数是在4.7版本中添加的。之前的版本有__sync_*
函数,其功能类似。 - Kerrek SB