2012-02-23 2 views
4

Я пишу программу, которая могла бы очень использовать __sync_fetch_and_add. К сожалению, мой autoconf скрипта, который ищет его с этим довольно простым тестом:Как объявить __sync_fetch_and_add?

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 

Это супер-раздражает, потому что я хотел бы использовать функцию, но некоторые человек на некоторых платформах сказали мне, что он не компилируется должным образом. Я хочу прототип, но, похоже, его нет.

Спасибо.

ответ

4

AC_CHECK_FUNCS не может использоваться в этом случае, так как redeclarating функции - которая делает 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])] 
) 
Смежные вопросы