Dangling extern "C" in pcap.h (was: Re: nmap broken on current)

Daniel Roethlisberger daniel at roe.ch
Mon Mar 30 12:47:52 PDT 2009


Daniel Roethlisberger <daniel at roe.ch> 2009-03-30:
> Peter Pentchev <roam at 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 at 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/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: libpcap.h-dangling-extern-C.diff
Type: text/x-diff
Size: 280 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-ports/attachments/20090330/f04d9657/libpcap.h-dangling-extern-C.bin


More information about the freebsd-ports mailing list