我正在编写一个可以使用__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
这太烦人了,因为我想使用这个功能,但是某些平台上的某些人告诉我它没有正确编译。我想要一个原型,但似乎没有原型。
感谢。
答案 0 :(得分:4)
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])]
)