This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]