Huge thanks to our Platinum Members Endace and LiveAction,
and our Silver Member Veeam, for supporting the Wireshark Foundation and project.

Ethereal-dev: RE: [Ethereal-dev] Compiling on cygwin does not work anymore

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Biot Olivier <Olivier.Biot@xxxxxxxxxxx>
Date: Wed, 17 Mar 2004 18:47:53 +0100
|From: Biot Olivier
|
|Hi list,
|
|It is impossible to compile Ethereal on cygwin anymore since 
|the build of
|the libethereal shared library. Libtool always complains about missing
|symbols. I think this is also the reason why we cannot build plugins on
|cygwin.

I tried to manually invoke libtool in epan/dfilter epan/ftypes and epan in
order to see if I could successfully link the objects together into a shared
library. Basically I retrieved the libtool commands which I modified by
adding '-shared -no-undefined' to the gcc options. This time I get
significantly fewer warnings but linkage of libethereal.la still fails.

The PCRE library is missing from the libftypes.la and the libethereal.la
linkage step; I think this is due to us defining the PCRE_LIBS variable in
autoconf, and not using it in automake (hence in the makefile). I manually
added '-lpcre' to both libtool invocations.

The Z library is missing from the libethereal.la linkage step. Hence I also
manually added '-lz' to this libtool invocation.

You can see the output of these steps in attached compressed log file.

As you can see, the linkage stops because of undefined declared symbols.

CygWin does *not* allow building shared libraries with undefined symbols as
can be read from the libtool warning below:
libtool: link: warning: undefined symbols not allowed in i686-pc-cygwin
shared libraries
This implies that we *cannot* build the libethereal shared library on cygwin
with the Ethereal code as it is today, as:

1. An external global variable 'timestamp_type' is *declared*
   in epan/timestamp.h but not *defined* in any object used to
   link epan/libethereal.la. It is defined in tethereal.c and
   in gtk/main.c.

2. And finally, the report_open_failure() symbol is declared in
   report_err.h and defined in alert_box.c. If I add alert_box.o
   to the objects to be linked into libethereral.la the I get
   the same reference issues with the simle_dialog symbol etc.

Could any handsome expert provide helping programming hands here?

I now strongly believe this is the reason why we can't build plugin
dissectors on cygwin. Should this be true, then we finally reached the Gates
of Oblivion which once traversed will give us plugin dissectors when
compiling with gcc on CygWin!

Regards,

Olivier

Attachment: modified-linkage.zip
Description: Binary data