LINUX.ORG.RU

Ошибка при компиляции файла на C: expected declaration specifiers or '...' before '('


0

0

Добрый день! При компиляции libpcap возникла непонятная ошибка:

gcc -nodefaultlibs -nostdlib -fPIC -static  -I/home/xvilka/build/cross/sys-root/usr/include -O2 \
-fPIC  -nodefaultlibs -nostdlib -fPIC -static  -I/home/xvilka/build/cross/sys-root/usr/include -I. \
  -DHAVE_CONFIG_H  -D_U_="__attribute__((unused))" -c ./pcap-usb-linux.c
In file included from ./pcap-usb-linux.c:57:
/home/xvilka/build/cross/sys-root/usr/include/string.h:431: error: expected declaration specifiers or '...' before '(' token
/home/xvilka/build/cross/sys-root/usr/include/string.h:431: error: expected declaration specifiers or '...' before '(' token
/home/xvilka/build/cross/sys-root/usr/include/string.h:431: error: expected declaration specifiers or '...' before '(' token
/home/xvilka/build/cross/sys-root/usr/include/string.h:431: error: expected ')' before ',' token
make[1]: *** [pcap-usb-linux.o] Error 1

В чем может быть проблема? (такую ошибку в первый раз встречаю) Некоторые флаги компилятора повторяются, хотя при .configure были заданы один раз, но уверен это не играет здесь роли. Помогите с решением, спасибо!

★★★★★

>libpcap
какеры атакуе, мир опасносте

dimon555 ★★★★★ ()
Ответ на: комментарий от lester_dev

В том и проблема, что все там в порядке. Потому что это libpcap включенный в дистрибутив nmap. При сборке отдельно libpcap все нормально. Даже если собирать отдельно.

XVilka ★★★★★ ()
Ответ на: комментарий от XVilka

-nodefaultlibs -nostdlib

может что-то из того? что там в string.h по 431 строке?

dimon555 ★★★★★ ()

наверно системные инклюды поставлены после своих инклюдов..

dilmah ★★★★★ ()
Ответ на: комментарий от ananas
#ifdef	__USE_BSD
/* Two OpenBSD extension functions. */
extern size_t strlcat(char *__restrict dst, const char *__restrict src,
                      size_t n) __THROW __nonnull ((1, 2));
extern size_t strlcpy(char *__restrict dst, const char *__restrict src,
                      size_t n) __THROW __nonnull ((1, 2));
#endif

Парадокс, но я никак не обьявлял __USE_BSD...

XVilka ★★★★★ ()
Ответ на: комментарий от io

не помогло. Анализ файла ничего не дал - все упирается в эти строчки. В оригинале libpcap файл pcap-usb-linux не компилируется, поэтому вырезал из макефайла и нормально. Но тогда в libdnet вывалилась ошибка

libtool: compile:  arm-android-linux-uclibcgnueabi-gcc -DHAVE_CONFIG_H -I. -I../include -I../include -dD -I/home/xvilka/build/cross/sys-root/usr/include -nodefaultlibs -nostdlib -fPIC -Wall -c addr-util.c -o addr-util.o
In file included from addr-util.c:17:
/home/xvilka/build/cross/sys-root/usr/include/string.h:429: error: conflicting types for 'strlcat'
../include/config.h:293: note: previous declaration of 'strlcat' was here
/home/xvilka/build/cross/sys-root/usr/include/string.h:431: error: conflicting types for 'strlcpy'
../include/config.h:297: note: previous declaration of 'strlcpy' was here

Что-то все вокруг одного файла крутиться...

XVilka ★★★★★ ()
Ответ на: комментарий от XVilka

>Даже если я добавляю флаг -U__USE_BSD все равно вываливаются эти ошибки...

Очевидно, что кто-то его устанавливает (в хидерах или еще где).

Самый очевидный вариант лечения — найти, где в твоем коде определяются прототипы и реализации strlcat и закомментить их.

linuxfan ()
Ответ на: комментарий от XVilka
#undef __USE_BSD
#ifdef   __USE_BSD 
/* Two OpenBSD extension functions. */ 
extern size_t strlcat(char *__restrict dst, const char *__restrict src, 
                      size_t n) __THROW __nonnull ((1, 2)); 
extern size_t strlcpy(char *__restrict dst, const char *__restrict src, 
                      size_t n) __THROW __nonnull ((1, 2)); 
#endif 

лол

lester_dev ★★★★★ ()
Ответ на: комментарий от XVilka

Проблема решена патчением configure.ac, в котором __USE_BSD было обьявлено принудительно.

XVilka ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.