【问题标题】:How to compile a C code that uses GNU C extensions如何编译使用 GNU C 扩展的 C 代码
【发布时间】:2013-03-04 16:59:15
【问题描述】:

我想使用函数__sync_lock_test_and_set,它在 ANSI c 中不可用,但它是一个 GNU C 扩展。

当编译一段使用此扩展的代码时,我收到以下错误,

/tmp/cc7Iat9G.o: In function `main':
swap.c:(.text+0x40): undefined reference to `__sync_lock_test_set'
collect2: ld returned 1 exit status

那么,我应该包含什么头文件,或者我应该提供什么编译器标志来编译带有 GNU C 扩展的代码

【问题讨论】:

  • C11 具有原生原子支持。使用现代 C 编译器,您可以在标准 C 中执行此操作。
  • 我只是在这里猜测,但可能是 __sync_lock_test_and_set 需要一个 ptr 到一个 volatile int 吗?或者不知何故你传递了错误的参数?
  • 我的项目受限于 icpc(英特尔编译器)。那么,我如何在 icpc 中编译它
  • 发布代码/gcc 调用:该调用与任何库都不相关,应使用适当的汇编例程即时交换
  • @Karthik 我不明白:你在英特尔编译器下使用 GCC 内部函数吗?

标签: c


【解决方案1】:

我认为您输入的是 __sync_lock_test_set,而您的意思是 __sync_lock_test_and_set。后者在GCC documentation on atomic builtins中提到;前者不是。

【讨论】:

  • 我太傻了。很惊讶你能弄清楚我的错误。非常感谢。
猜你喜欢
  • 2010-10-02
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多