Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Date: Wed, 9 Mar 2005 15:01:12 -0500 From: Christopher Faylor To: cygwin AT cygwin DOT com Subject: Re: req: using cygwin's gcc for creating static libs in msvc binary format (.a => .lib) # Re: static MSVC library? Message-ID: <20050309200112.GA17199@gully.bosbc.com> Reply-To: cygwin AT cygwin DOT com References: <20050309173223 DOT 505222101B7 AT warserver DOT warande DOT net> <20050309173442 DOT GB16830 AT gully DOT bosbc DOT com> <422F4DBA DOT 7020501 AT buddydog DOT org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <422F4DBA.7020501@buddydog.org> User-Agent: Mutt/1.5.6i On Wed, Mar 09, 2005 at 02:25:46PM -0500, Jonathan Arnold wrote: >Christopher Faylor wrote: >>On Wed, Mar 09, 2005 at 06:32:09PM +0100, Arend-Jan Westhoff wrote: >> >>>It looks like changing a lib.a into a lib.lib might require only a rename! >>>(But I remember reading that debug formats differ between gcc and VC.) >> >>You're right. The only difference is the debug info. A cygwin .a file is >>roughly the same thing as a MSVC .lib file. >> >>But, of course, that was true back in 1999, too. > >Yes, just because the *format* is the same doesn't mean you can use a >LIB (or OBJ) file generated by one compiler when using another linker. >In fact, I'd be willing to bet dollars to donuts that it cannot be >done. Mmm... Donuts. >This is due to lots of things, not the least of which is naming >conventions, stack usage, and internal structure differences. Static >libs are not, and never will be, cross-compiler, unless there is a >specific switch in a compiler that says "Generate VC++ compatible >object information" or some such. You seem to be speaking pretty forcefully for someone who doesn't know if there is a "specific switch... or some such". I'll just reiterate what I said. A foo.lib can be used interchangeably with a libfoo.a file. Except for the well-documented and frequently repeated problems with C++ name mangling, and the even more repeated problems with mixing the cygwin and msvcrt runtime libraries, there should be no problems with using a .lib file on the gcc command line or a .a file on the "cl" command line. In fact, I just tried it. I created two MSVC object files, put them in a .lib, and linked them with a program that I compiled using gcc -mno-cygwin. Then I put the same two files in a ".a" and linked them using "cl". You will have to play around with the right libraries required to satisfy things that mingw adds to an object file if you want to use msdev for linking but this is not an insurmountable problem. Getting this working with object files compiled without -mno-cygwin would be tricky (and maybe even not possible) but it's certainly possible to use msvc created .lib files with gcc and gcc/ar created .a files with msvc. -- Christopher Faylor spammer? -> aaaspam AT sourceware DOT org Cygwin Co-Project Leader aaaspam AT duffek DOT com TimeSys, Inc. -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/