You are not logged in.

#1 2014-10-28 05:57:23

lu6cifer
Member
Registered: 2013-07-17
Posts: 5

Compiling libpcap -- header issues

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

#2 2014-10-29 13:03:57

mauritiusdadd
Member
From: Benevento, Italy
Registered: 2013-10-27
Posts: 776

Re: Compiling libpcap -- header issues

Hi lu6cifer,

can you be more precise?

lu6cifer wrote:

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?

lu6cifer wrote:

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?


About me - github

-- When you have eliminated the impossible, whatever remains, however improbable, must be the truth -- Spock | Sherlock Holmes

Offline

#3 2014-10-29 14:42:34

lu6cifer
Member
Registered: 2013-07-17
Posts: 5

Re: Compiling libpcap -- header issues

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

#4 2014-10-29 15:52:04

mauritiusdadd
Member
From: Benevento, Italy
Registered: 2013-10-27
Posts: 776

Re: Compiling libpcap -- header issues

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)


About me - github

-- When you have eliminated the impossible, whatever remains, however improbable, must be the truth -- Spock | Sherlock Holmes

Offline

Board footer

Powered by FluxBB