DLL's and inlined methods

Schaible, Joerg Joerg.Schaible@gft.de
Mon May 31 21:10:00 GMT 1999


As you may see below in the command line of the compiler building Mumit's
sample no -O option is set. If I set -fno-default-inline situation gets even
worse, since I will get duplicate symbols also for the inlined methods of
the standard C++ headers.

> -----Original Message-----
> From:	jeffdbREMOVETHIS@goodnet.com [SMTP:jeffdbREMOVETHIS@goodnet.com]
> Sent:	Friday, May 07, 1999 4:52 PM
> To:	Schaible, Joerg
> Subject:	Re: DLL's and inlined methods
> 
> Without -O NO methods are made inline
> 
> On Fri, 7 May 1999 13:34:00 +0200 , you wrote:
> 
> >Hello,
> >
> >me again. I got trouble building a dll with classes that have inlined
> >methods. I've modified Mumit's sample to demonstrate the problem:
> >
> >// dllclass.h:
> >
> >class DLLIMPORT
> >DllClass : public DllClassBase {
> >public:
> >  DllClass (int i = 0);
> >  ~DllClass ();
> >  int non_virtual_method () const;
> >  virtual int virtual_method () const;
> >// ======== Added inlined method here =============
> >  int inline_method() const { for( int i = 40, j = 0; i--; ) j++; }
> >#ifdef __GNUC__
> >  DLLIMPORT             // work around an egcs-1.1 bug
> >#endif
> >  static int instances;
> >private:
> >  int i_;
> >};
> >
> >// dllclass.cc:
> >
> >// added this function
> >void dummy1()
> >{
> >    DllClass dc;
> >    dc.inline_method();
> >}
> >
> >
> >// dllinline.cc  <== Added new module to DLL
> >
> >#include "dllclass.h"
> >
> >void dummy2()
> >{
> >    DllClass dc;
> >    dc.inline_method();
> >}
> >
> >
> >I will have following error message running make:
> >
> >c++ -c -DBUILDING_DLL=1 -I. -g  -o dllclass.o dllclass.cc
> >c++ -c -DBUILDING_DLL=1 -I. -g  -o dllexterns.o dllexterns.cc
> >c++ -c -DBUILDING_DLL=1 -I. -g  -o dllinline.o dllinline.cc
> >gcc -c -DBUILDING_DLL=1 -I. -g  -o dllinit.o dllinit.c
> >dllwrap --export-all --output-def cxxdll.def --implib libcxxdll.a
> >--driver-name c++ -o cxxdll.dll \
> >        dllclass.o dllexterns.o dllinline.o dllinit.o
> >Warning: no export definition file provided
> >dllwrap will create one, but may not be what you want
> >dllinline.o: In function `DllClass::inline_method(void) const':
> >/egcs-1-1-2/dllhelpers-0.2.5/c++/dllclass.h:26: multiple definition of
> >`DllClass::inline_method(void) const'
> >dllclass.o(.text$inline_method__C8DllClass+0x0):/egcs-1-1-2/dllhelpers-0.
> 2.5
> >/c++/dllclass.cc: first defined here
> >collect2: ld returned 1 exit status
> >dllwrap: c++ exited with status 1
> >make: *** [cxxdll.dll] Error 1
> >
> >
> >Any suggestions ?
> >Jörg

--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe@sourceware.cygnus.com



More information about the Cygwin mailing list