Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Mar 2009 21:47:25 +0200
From:      Daniel Roethlisberger <daniel@roe.ch>
To:        Manfred Antar <null@pozo.com>, Peter Pentchev <roam@ringlet.net>, ports@freebsd.org, rpaulo@FreeBSD.org
Subject:   Dangling extern "C" in pcap.h (was: Re: nmap broken on current)
Message-ID:  <20090330194725.GA10713@hobbes.ustdmz.roe.ch>
In-Reply-To: <20090330113215.GA4768@hobbes.ustdmz.roe.ch>
References:  <200903300223.n2U2N6mO074911@pozo.com> <20090330072620.GA928@straylight.m.ringlet.net> <20090330113215.GA4768@hobbes.ustdmz.roe.ch>

next in thread | previous in thread | raw e-mail | index | archive | help

--qlTNgmc+xy1dBmNv
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Daniel Roethlisberger <daniel@roe.ch> 2009-03-30:
> Peter Pentchev <roam@ringlet.net> 2009-03-30:
> > On Sun, Mar 29, 2009 at 07:23:00PM -0700, Manfred Antar wrote:
> > > the nmap port is broken on current:
> > 
> > Shouldn't this be reported to the port's maintainer - Daniel
> > Roethlisberger <daniel@roe.ch>? :)  I've CC'd him on this message...
> 
> Thanks for CC:-ing me, Peter.
> 
> > > c++ -c -I/usr/local/include/lua51 -I/usr/local/include -I/usr/local/include  -I/usr/include -Inbase -Insock/include -O2 -pipe -fno-strict-aliasing -Wall  -fno-strict-aliasing   -DHAVE_CONFIG_H -DNMAP_NAME=\"Nmap\" -DNMAP_URL=\"http://nmap.org\" -DNMAP_PLATFORM=\"i386-portbld-freebsd8.0\" -DNMAPDATADIR=\"/usr/local/share/nmap\" -DNMAPLIBEXECDIR=\"/usr/local/libexec/nmap\" main.cc -o main.o
> > > c++ -c -I/usr/local/include/lua51 -I/usr/local/include -I/usr/local/include  -I/usr/include -Inbase -Insock/include -O2 -pipe -fno-strict-aliasing -Wall  -fno-strict-aliasing   -DHAVE_CONFIG_H -DNMAP_NAME=\"Nmap\" -DNMAP_URL=\"http://nmap.org\" -DNMAP_PLATFORM=\"i386-portbld-freebsd8.0\" -DNMAPDATADIR=\"/usr/local/share/nmap\" -DNMAPLIBEXECDIR=\"/usr/local/libexec/nmap\" nmap.cc -o nmap.o
> > > In file included from Target.h:115,
> > >                  from traceroute.h:101,
> > >                  from nmap.cc:111:
> > > tcpip.h:458: error: declaration of C function 'int resolve(char*, in_addr*)' conflicts with
> > > tcpip.h:453: error: previous declaration 'int resolve(char*, sockaddr_storage*, size_t*, int)' here
> > > In file included from nmap.cc:121:
> > > utils.h:188: error: template with C linkage
> > > nmap.h: In function 'int nmap_main(int, char**)':
> > > nmap.h:416: error: previous declaration of 'int nmap_main(int, char**)' with 'C++' linkage
> > > nmap.cc:503: error: conflicts with new declaration with 'C' linkage
> > > nmap.cc: In function 'int nmap_main(int, char**)':
> > > nmap.cc:1167: error: cannot convert 'sockaddr_storage*' to 'in_addr*' for argument '2' to 'int resolve(char*, in_addr*)'
> > > nmap.cc:1673: error: cannot convert 'sockaddr_storage*' to 'in_addr*' for argument '2' to 'int resolve(char*, in_addr*)'
> > > nmap.h: In function 'void nmap_free_mem()':
> > > nmap.h:418: error: previous declaration of 'void nmap_free_mem()' with 'C++' linkage
> > > nmap.cc:1907: error: conflicts with new declaration with 'C' linkage
> > > nmap.h: In function 'int gather_logfile_resumption_state(char*, int*, char***)':
> > > nmap.h:438: error: previous declaration of 'int gather_logfile_resumption_state(char*, int*, char***)' with 'C++' linkage
> > > nmap.cc:1932: error: conflicts with new declaration with 'C' linkage
> > > nmap.h: In function 'void nmap_free_mem()':
> > > nmap.h:413: error: previous declaration of 'void init_socket(int)' with 'C++' linkage
> > > nmap.cc:2038: error: conflicts with new declaration with 'C' linkage
> > > nmap.h:407: error: previous declaration of 'void getpts(const char*, scan_lists*)' with 'C++' linkage
> > > nmap.cc:2128: error: conflicts with new declaration with 'C' linkage
> > > nmap.h:409: error: previous declaration of 'void getpts_simple(const char*, int, short unsigned int**, int*)' with 'C++' linkage
> > > nmap.cc:2191: error: conflicts with new declaration with 'C' linkage
> > > nmap.h:410: error: previous declaration of 'void free_scan_lists(scan_lists*)' with 'C++' linkage
> > > nmap.cc:2400: error: conflicts with new declaration with 'C' linkage
> > > nmap.h:402: error: previous declaration of 'void printinteractiveusage()' with 'C++' linkage
> > > nmap.cc:2410: error: conflicts with new declaration with 'C' linkage
> > > nmap.h:426: error: previous declaration of 'char* seqreport(seq_info*)' with 'C++' linkage
> > > nmap.cc:2432: error: conflicts with new declaration with 'C' linkage
> > > nmap.h:434: error: previous declaration of 'const char* seqidx2difficultystr(long unsigned int)' with 'C++' linkage
> > > nmap.cc:2441: error: conflicts with new declaration with 'C' linkage
> > > nmap.h:429: error: previous declaration of 'const char* ipidclass2ascii(int)' with 'C++' linkage
> > > nmap.cc:2445: error: conflicts with new declaration with 'C' linkage
> > > nmap.h:430: error: previous declaration of 'const char* tsseqclass2ascii(int)' with 'C++' linkage
> > > nmap.cc:2466: error: conflicts with new declaration with 'C' linkage
> > > nmap.h:423: error: previous declaration of 'const char* scantype2str(stype)' with 'C++' linkage
> > > nmap.cc:2491: error: conflicts with new declaration with 'C' linkage
> > > nmap.h:422: error: previous declaration of 'const char* statenum2str(int)' with 'C++' linkage
> > > nmap.cc:2523: error: conflicts with new declaration with 'C' linkage
> > > nmap.h:404: error: previous declaration of 'int ftp_anon_connect(ftpinfo*)' with 'C++' linkage
> > > nmap.cc:2536: error: conflicts with new declaration with 'C' linkage
> > > nmap.h:425: error: previous declaration of 'void reaper(int)' with 'C++' linkage
> > > nmap.cc:2614: error: conflicts with new declaration with 'C' linkage
> > > nmap.h:424: error: previous declaration of 'void sigdie(int)' with 'C++' linkage
> > > nmap.cc:2626: error: conflicts with new declaration with 'C' linkage
> > > nmap.h: In function 'int nmap_fileexistsandisreadable(const char*)':
> > > nmap.h:437: error: previous declaration of 'int nmap_fileexistsandisreadable(const char*)' with 'C++' linkage
> > > nmap.cc:2705: error: conflicts with new declaration with 'C' linkage
> > > nmap.h: In function 'int nmap_fetchfile(char*, int, const char*)':
> > > nmap.h:436: error: previous declaration of 'int nmap_fetchfile(char*, int, const char*)' with 'C++' linkage
> > > nmap.cc:2709: error: conflicts with new declaration with 'C' linkage
> > > nmap.cc: At global scope:
> > > nmap.cc:2837: error: expected `}' at end of input
> > > gmake[1]: *** [nmap.o] Error 1
> > > gmake[1]: Leaving directory `/usr/ports/security/nmap/work/nmap-4.76'
> > > gmake: *** [all] Error 2
> > > *** Error code 1
> > > 
> > > Stop in /usr/ports/security/nmap.
> 
> Manfred, can you file a PR and make sure to also include the date
> of your -current sources and the content of your /etc/make.conf?

Update:  This is caused by a dangling extern "C" in
/usr/include/pcap.h, which breaks the use of libpcap from C++.
The attached patch fixes the issue for me.

I'm Cc:-ing rpaulo@ who committed the recent update to libpcap.

-- 
Daniel Roethlisberger
http://daniel.roe.ch/

--qlTNgmc+xy1dBmNv
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="libpcap.h-dangling-extern-C.diff"

--- contrib/libpcap/pcap.h.orig	2009-03-27 07:27:01.000000000 +0100
+++ contrib/libpcap/pcap.h	2009-03-30 21:42:31.000000000 +0200
@@ -53,10 +53,6 @@
 
 #include <stdio.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 #define PCAP_VERSION_MAJOR 2
 #define PCAP_VERSION_MINOR 4
 

--qlTNgmc+xy1dBmNv--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090330194725.GA10713>