You are not logged in.
Hey guys, I'm trying to compile libpcap from source and I'm encountering some issues. Here's the error log from make:
gcc -fpic -I. -I/usr/include/libnl3 -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -I/usr/lib/modules/3.17.1-1-ARCH/build/include/net -I/usr/lib/modules/3.17.1-1-ARCH/build/include -DHAVE_CONFIG_H -D_U_="__attribute__((unused))" -g -O2 -c ./pcap-bt-monitor-linux.c
In file included from /usr/include/linux/sysinfo.h:4:0,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/uapi/linux/kernel.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/cache.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/time.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/ktime.h:24,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/poll.h:6,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/net/bluetooth/bluetooth.h:28,
from ./pcap-bt-monitor-linux.c:40:
/usr/lib/modules/3.17.1-1-ARCH/build/include/linux/types.h:14:26: error: conflicting types for ‘fd_set’
typedef __kernel_fd_set fd_set;
^
In file included from /usr/include/sys/types.h:219:0,
from /usr/include/stdlib.h:314,
from ./pcap-bt-monitor-linux.c:37:
/usr/include/sys/select.h:75:5: note: previous declaration of ‘fd_set’ was here
} fd_set;
^
In file included from /usr/include/linux/sysinfo.h:4:0,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/uapi/linux/kernel.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/cache.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/time.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/ktime.h:24,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/poll.h:6,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/net/bluetooth/bluetooth.h:28,
from ./pcap-bt-monitor-linux.c:40:
/usr/lib/modules/3.17.1-1-ARCH/build/include/linux/types.h:15:25: error: conflicting types for ‘dev_t’
typedef __kernel_dev_t dev_t;
^
In file included from /usr/include/stdlib.h:314:0,
from ./pcap-bt-monitor-linux.c:37:
/usr/include/sys/types.h:60:17: note: previous declaration of ‘dev_t’ was here
typedef __dev_t dev_t;
^
In file included from /usr/include/linux/sysinfo.h:4:0,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/uapi/linux/kernel.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/cache.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/time.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/ktime.h:24,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/poll.h:6,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/net/bluetooth/bluetooth.h:28,
from ./pcap-bt-monitor-linux.c:40:
/usr/lib/modules/3.17.1-1-ARCH/build/include/linux/types.h:19:17: error: conflicting types for ‘nlink_t’
typedef __u32 nlink_t;
^
In file included from /usr/include/stdlib.h:314:0,
from ./pcap-bt-monitor-linux.c:37:
/usr/include/sys/types.h:75:19: note: previous declaration of ‘nlink_t’ was here
typedef __nlink_t nlink_t;
^
In file included from /usr/include/linux/sysinfo.h:4:0,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/uapi/linux/kernel.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/cache.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/time.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/ktime.h:24,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/poll.h:6,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/net/bluetooth/bluetooth.h:28,
from ./pcap-bt-monitor-linux.c:40:
/usr/lib/modules/3.17.1-1-ARCH/build/include/linux/types.h:25:26: error: conflicting types for ‘timer_t’
typedef __kernel_timer_t timer_t;
^
In file included from /usr/include/sys/types.h:132:0,
from /usr/include/stdlib.h:314,
from ./pcap-bt-monitor-linux.c:37:
/usr/include/time.h:103:19: note: previous declaration of ‘timer_t’ was here
typedef __timer_t timer_t;
^
In file included from /usr/include/linux/sysinfo.h:4:0,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/uapi/linux/kernel.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/cache.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/time.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/ktime.h:24,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/poll.h:6,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/net/bluetooth/bluetooth.h:28,
from ./pcap-bt-monitor-linux.c:40:
/usr/lib/modules/3.17.1-1-ARCH/build/include/linux/types.h:45:26: error: conflicting types for ‘loff_t’
typedef __kernel_loff_t loff_t;
^
In file included from /usr/include/stdlib.h:314:0,
from ./pcap-bt-monitor-linux.c:37:
/usr/include/sys/types.h:44:18: note: previous declaration of ‘loff_t’ was here
typedef __loff_t loff_t;
^
In file included from /usr/include/linux/sysinfo.h:4:0,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/uapi/linux/kernel.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/cache.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/time.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/ktime.h:24,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/poll.h:6,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/net/bluetooth/bluetooth.h:28,
from ./pcap-bt-monitor-linux.c:40:
/usr/lib/modules/3.17.1-1-ARCH/build/include/linux/types.h:112:17: error: conflicting types for ‘u_int64_t’
typedef __u64 u_int64_t;
^
In file included from /usr/include/stdlib.h:314:0,
from ./pcap-bt-monitor-linux.c:37:
/usr/include/sys/types.h:203:1: note: previous declaration of ‘u_int64_t’ was here
__u_intN_t (64, __DI__);
^
In file included from /usr/include/linux/sysinfo.h:4:0,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/uapi/linux/kernel.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/cache.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/time.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/ktime.h:24,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/poll.h:6,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/net/bluetooth/bluetooth.h:28,
from ./pcap-bt-monitor-linux.c:40:
/usr/lib/modules/3.17.1-1-ARCH/build/include/linux/types.h:113:17: error: conflicting types for ‘int64_t’
typedef __s64 int64_t;
^
In file included from /usr/include/stdlib.h:314:0,
from ./pcap-bt-monitor-linux.c:37:
/usr/include/sys/types.h:197:1: note: previous declaration of ‘int64_t’ was here
__intN_t (64, __DI__);
^
In file included from /usr/include/linux/sysinfo.h:4:0,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/uapi/linux/kernel.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/cache.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/time.h:4,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/ktime.h:24,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/poll.h:6,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/net/bluetooth/bluetooth.h:28,
from ./pcap-bt-monitor-linux.c:40:
/usr/lib/modules/3.17.1-1-ARCH/build/include/linux/types.h:134:23: error: conflicting types for ‘blkcnt_t’
typedef unsigned long blkcnt_t;
^
In file included from /usr/include/stdlib.h:314:0,
from ./pcap-bt-monitor-linux.c:37:
/usr/include/sys/types.h:235:20: note: previous declaration of ‘blkcnt_t’ was here
typedef __blkcnt_t blkcnt_t; /* Type to count number of disk blocks. */
^
In file included from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/time.h:4:0,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/ktime.h:24,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/poll.h:6,
from /usr/lib/modules/3.17.1-1-ARCH/build/include/net/bluetooth/bluetooth.h:28,
from ./pcap-bt-monitor-linux.c:40:
/usr/lib/modules/3.17.1-1-ARCH/build/include/linux/cache.h:5:23: fatal error: asm/cache.h: No such file or directory
#include <asm/cache.h>
^
compilation terminated.
Makefile:84: recipe for target 'pcap-bt-monitor-linux.o' failed
make: *** [pcap-bt-monitor-linux.o] Error 1
Now, I did change the makefile by adding /usr/lib/modules/3.17.1-1-ARCH/build/include and /usr/lib/modules/3.17.1-1-ARCH/build/include/net to my include path,
because it was necessary to get it to compile at an earlier step. But now, as you can see from the first error, a file in libpcap wants the header linux/types.h, but I believe
it is referring to the "types.h" in /usr/include/linux/types.h, and not the types.h in /usr/lib/modules/3.17.1-1-ARCH/build/include/linux/types.h, which is different.
How can I resolve this? I have to include the path /usr/lib/modules/3.17.1-1-ARCH/build/include because libpcap needed it for some bluetooth headers or something.
But how can I tell gcc to look at the other linux/types.h instead? Or would I have to move some files around?
EDIT: It seems like the actual issue here is that /usr/include/sys/types.h is included. Somehow, the __USE_MISC macro is being defined, causing sys/select.h and sys/types.h to be included, thus including fd_set twice.....But I've grepped the libpcap source and I can't find __USE_MISC anywhere....
Last edited by lu6cifer (2014-10-28 07:36:34)
Offline
Hi lu6cifer,
can you be more precise?
I'm trying to compile libpcap from source
do you mean you downloaded the PKGBUILD for core/libpcap and you are trying to build it using makepg or you are trying to compile the source code downloaded from upstream?
I have to include the path /usr/lib/modules/3.17.1-1-ARCH/build/include because libpcap needed it for some bluetooth headers or something.
What headers? What error message did you receive?
Offline
One of the headers was <bluetooth/mgmt.h>, which was only in /usr/lib/modules/3.17.1-1-ARCH/build/include and not /usr/include/bluetooth
I was trying to compile the source downloaded from upstream.
Offline
Well, the problem is that you cannot directly include /usr/lib/modules/3.17.1-1-ARCH/build/include to your include path, because doing this will lead to conflicting declarations. Moreover, it seems that unfortunately the file mmgt.h present in the aforementioned directory is not compatible with libpcap. However you can find a compatible version of the header here.
One way to resolve your problem is then to create a custom include directory in which you will copy the missing header (that is basically what is done inside the PKGBUILD). Let's say, for example, that ${source_dir} is the directory containing the libpcap sources then you have to execute the following commands:
#creating custom include directory
mkdir -p ${source_dir}/include/bluetooth
#downloading the missing header into it
curl https://projects.archlinux.org/svntogit/packages.git/plain/trunk/mgmt.h?h=packages/libpcap -o ${source_dir}/include/bluetooth/mgmt.h
#Adding the custom include directory to the include path
export CFLAGS="$CFLAGS -I${source_dir}/include"
#Finally run the configure script
./configure --prefix=/usr
Last edited by mauritiusdadd (2014-10-29 15:55:22)
Offline