Wireshark-users: Re: [Wireshark-users] Build problems with Sun's compiler on Solaris 10
From: Guy Harris <guy@xxxxxxxxxxxx>
Date: Wed, 06 Feb 2008 16:42:00 -0800
Dr. David Kirkby wrote:

2) I just installed libpcap from the file libpcap-0.9.8.tar.gz, but the wireshark configure script complains that the pcap library is more recent than the pcap header.

checking whether pcap_breakloop is present and usable... broken
configure: WARNING: Your pcap library is more recent than your pcap header.
configure: WARNING: Wireshark won't be able to use functions not declared
configure: WARNING: in that header. You should install a newer version of
configure: WARNING: the header file.
checking whether pcap_findalldevs is present and usable... yes
checking for pcap_datalink_val_to_name... yes

I've no idea why this should be so.

Well, one way that should be so would be if, for example, a hypothetical maker of UN*X boxes, whose version of UN*X includes libpcap, were to put out an online OS update that upgrades its version of libpcap as part of a tcpdump/libpcap upgrade to plug some security holes, with the upgrade to libpcap being an upgrade from a version without pcap_breakloop() to a version with pcap_breakloop(), and if that vendor were to treat header files as part of its development tools, and not to update them with that online OS update, so that you have a library with pcap_breakloop() and a header file that doesn't declare it.

As you built and installed libpcap yourself, that wouldn't be it, so we'd have to look elsewhere. What are the contents of your config.log file?

6) NOW THIS IS THE SERIOUS PROBLEM - it stops me building wireshark and I have not yet found a solution.

./configure CC=/opt/SUNWspro/bin/cc CXX=/opt/SUNWspro/bin/CC
This configures OK - see above for what is configured.

gmake

After quite a bit of time compiling OK, the compilation process aborts with:

source='packet-ecatmb.c' object='packet-ecatmb.lo' libtool=yes \
DEPDIR=.deps depmode=none /bin/bash ../../depcomp \
/bin/bash ../../libtool --tag=CC --mode=compile /opt/SUNWspro/bin/cc -DHAVE_CONFIG_H -I. -I../.. -I../.. -I/usr/local/include -I/usr/local/include '-DPLUGIN_DIR="/usr/local/lib/wireshark/plugins/0.99.7"' -D_U_="" -g -I/usr/local/include -mt -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/pango-1.0 -I/usr/openwin/include -I/usr/sfw/include -I/usr/sfw/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -c -o packet-ecatmb.lo packet-ecatmb.c /opt/SUNWspro/bin/cc -DHAVE_CONFIG_H -I. -I../.. -I../.. -I/usr/local/include -I/usr/local/include -DPLUGIN_DIR=\"/usr/local/lib/wireshark/plugins/0.99.7\" -D_U_= -g -I/usr/local/include -mt -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/pango-1.0 -I/usr/openwin/include -I/usr/sfw/include -I/usr/sfw/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -c packet-ecatmb.c -KPIC -DPIC -o .libs/packet-ecatmb.o
"packet-ecatmb.c", line 291: improper member use: Control

Are you compiling with the latest version of plugins/ethercat/ecatmb.h? What, for example, are the definitions of SoeHeaderControlUnion and PETHERCAT_SOE_HEADER in that header? They should be

typedef union tSoeHeaderControlUnion
{
   struct
   {
guint8 OpCode : 3; /* 0 = unused, 1 = readReq, 2 = readRes, 3 = writeReq, 4 = writeRes 5 = notification (command changed notification)*/
      guint8 InComplete : 1; /* more follows*/
      guint8 Error      : 1; /* an error word follows */
      guint8 DriveNo    : 3; /* drive number */

      guint8 DataState  : 1; /* follows or requested */
      guint8 Name       : 1; /* follows or requested */
      guint8 Attribute  : 1; /* follows or requested */
      guint8 Unit       : 1; /* follows or requested */
      guint8 Min        : 1; /* follows or requested */
      guint8 Max        : 1; /* follows or requested */
      guint8 Value      : 1; /* follows or requested */
      guint8 Reserved   : 1;
   } v;
   struct
   {
      guint8 Control;
      guint8 Element;
   } v2;
} SoeHeaderControlUnion;

and

typedef struct TETHERCAT_SOE_HEADER
{
   SoeHeaderControlUnion anSoeHeaderControlUnion;
   SoeHeaderDataUnion anSoeHeaderDataUnion;
   /* typedef union tMailBoxDataUnion
   {
   guint8    Data[]   rest of mailbox data  if (Error==0)
   guint16 ErrorCode                        if (Error==1)
   } MailBoxDataUnion;*/
} ETHERCAT_SOE_HEADER, *PETHERCAT_SOE_HEADER;