From: <dan...@ya...> - 2003-05-14 20:47:26
|
Thanks Greg, I thinke we need to poison "extern __inline__" throughout the mingw headers because it will cause even more bugs when C99 standard interpretation of "extern inline" is enforced rather than the current GNUC extension meaning. "static inline" is much safer and stanadrd. I wonder why this has triggered a bug before. Danny --- Greg Chicares <chi...@mi...> wrote: > Test case below produces multiple definition of this symbol. > There's probably a similar problem with strncasecmp(). > > Is this just a cockpit error, e.g. because I've incorrectly > patched the 3.2.3 prerelease? If not... > > Should this be fixed by removing the __inline__ definitions? > Is a formal sf.net bug report desired? > > *** Analysis: > > strcasecmp() is defined in the 'oldname' libraries: > > C:/MinGW/lib[0]$nm --print-file-name lib*.a |grep strcasecmp > libbfd.a:archures.o: U _strcasecmp > libcoldname.a:string_old.o:00000000 T _strcasecmp > libmoldname.a:string_old.o:00000000 T _strcasecmp > libmoldnamed.a:string_old.o:00000000 T _strcasecmp > > but it's defined inline too: > > include/string.h > > /* > * Non-underscored versions of non-ANSI functions. They live in liboldnames.a > * and provide a little extra portability. Also a few extra UNIX-isms like > * strcasecmp. > */ > [...] > extern __inline__ int __cdecl > strcasecmp (const char * __sz1, const char * __sz2) > {return _stricmp (__sz1, __sz2);} > > *** Test case: > > /* foo.cpp */ > int foo(); > int main() > { > return foo(); > } > > /* lib_foo.cpp */ > #include <bfd.h> > #include <string.h> > int foo() > { > bfd_hash_table_free(0); // force link to libbfd.a > return strcasecmp(0, 0); // don't run this--just demonstrate link error > } > > C:/tmp[0]$g++ -c lib_foo.cpp > C:/tmp[0]$ar ruv libfoo.a lib_foo.o > a - lib_foo.o > C:/tmp[0]$ranlib libfoo.a > C:/tmp[0]$g++ foo.cpp -L. -lfoo -lbfd -liberty > /MinGW/bin/../lib/gcc-lib/mingw32/3.2.3/../../../libmoldname.a(string_old.o)(.te > xt+0x0):string_old.c: multiple definition of `strcasecmp' > ./libfoo.a(lib_foo.o)(.text$strcasecmp+0x0):lib_foo.cpp: first defined here > C:/tmp[1]$ > > > ------------------------------------------------------- > Enterprise Linux Forum Conference & Expo, June 4-6, 2003, Santa Clara > The only event dedicated to issues related to Linux enterprise solutions > www.enterpriselinuxforum.com > > _______________________________________________ > MinGW-users mailing list > Min...@li... > > You may change your MinGW Account Options or unsubscribe at: > https://lists.sourceforge.net/lists/listinfo/mingw-users http://mobile.yahoo.com.au - Yahoo! Mobile - Check & compose your email via SMS on your Telstra or Vodafone mobile. |