req: using cygwin's gcc for creating static libs in msvc binary format (.a => .lib) # Re: static MSVC library?

Jonathan Arnold jdarnold@buddydog.org
Wed Mar 9 21:17:00 GMT 2005


Christopher Faylor wrote:
> 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 added that because there could be a specific switch that would
obviously make it compatible.  But in the absence thereof, I firmly
believe my statement to be true, and have experienced it over many
years of programming, across many different platforms and compilers.

> 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.

Oops, excuse me. I guess I didn't think it necessary to qualify the
above statement, so I will here:

==
You cannot intermix non-trivial C++ (and, in many cases, even C) object
files between compilers.
==

I'm not saying that it can't be done in some specialized circumstances,
for some short period of time.  But before long, you *will* get bitten
by an incompatiblity. The Standard says nothing about object file formats,
internal structures, name-mangling, stack usage, and so on.  And that
nearly guarantees disaster.

-- 
Jonathan Arnold     (mailto:jdarnold@buddydog.org)
Amazing Developments       http://www.buddydog.org

I feel like a fugitive from the law of averages. -
  William H. Mauldin


--
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/



More information about the Cygwin mailing list