我正在编写一个可以非常使用 __sync_fetch_and_add 的程序.不幸的是我的autoconf
使用这个相当简单的测试搜索它的脚本:
AC_CHECK_FUNCS([__sync_fetch_and_add])
生成此错误:
Wsuggest-attribute=noreturnconftest.c:56:1: warning: function declaration isn't a prototype [-Wstrict-prototypes]
conftest.c:56:6: warning: conflicting types for built-in function '__sync_fetch_and_add' [enabled by default]
conftest.c:65:1: warning: function declaration isn't a prototype [-Wstrict-prototypes]
/tmp/ccqPsZz4.o: In function `main':
/home/simsong/domex/src/bulk_extractor/tags/1.2.x/conftest.c:67: undefined reference to `__sync_fetch_and_add'
collect2: ld returned 1 exit status
这太烦人了,因为我想使用该功能,但是某些平台上的某些人告诉我它无法正确编译。我想要一个原型(prototype),但似乎没有。
谢谢。
最佳答案
AC_CHECK_FUNCS
在这种情况下不可用,因为重新声明 autoconf 所做的函数(char functionthatiwant()
/conftest.c
中的 config.log
)会不利地覆盖内置函数。您将需要类似以下内容。
AC_MSG_CHECKING([for __sync_fetch_and_add])
AC_LINK_IFELSE(
[AC_LANG_SOURCE([
int main(void) { return __sync_fetch_and_add((int *)0, 0); }
])],
[AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])]
)
关于gcc - 如何声明 __sync_fetch_and_add?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9407380/