This is the mail archive of the
cygwin
mailing list for the Cygwin project.
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/