Как я могу объявить синхронизации выборки и добавить?
Я пишу программу, которая может очень сильно использовать __sync_fetch_и_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
Это очень раздражает, потому что я хотел бы использовать эту функцию, но некоторые люди на некоторых платформах сказали мне, что она не компилируется должным образом. Мне нужен прототип, но его, похоже, нет.
Спасибо.
1 ответ:
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])] )