This is the mail archive of the
mailing list for the Cygwin project.
Re: Linking VC++ apps to cygwin-based DLLs
- From: Brian Dessent <brian at dessent dot net>
- To: "Cygwin Mailing List (E-mail)" <cygwin at cygwin dot com>
- Date: Thu, 22 Jan 2004 22:22:05 -0800
- Subject: Re: Linking VC++ apps to cygwin-based DLLs
- Organization: My own little world...
- References: <E19E2FC4AD37D04E9A8832D6BF1ADA42702B67@xmail.il.cgen.biz>
- Reply-to: cygwin at cygwin dot com
Tomer Zekharya wrote:
> I want to port a certain group of libraries from UNIX to windows. I managed to compile and link it using cygwin, but the Windows applications that needs these libs are MFC based, so I can't compile them in cygwin (at least that's what I understood from searching through the web and through the cygwin mailing list).
> I tried doing the opposite: compile the UNIX code to DLLs using cygwin, and trying to link to them in VC++, but I get all kind of errors. After compiling the DLLs as described in the "Building DLLs" section in the Cygwin manual, I get the following message when linking in VC++:
> warning LNK4078: multiple ".text" sections found with different attributes (E0000020)
> And my application crashes on some kind of memory fault.
> Since I'm new to this world of cygwin and VC++, I don't really know if I made a mistake in the cygwin side or the VC++ side. If anyone has successfully compiled MFC based applications linking against cygwin-based DLLs, I'll be more than happy to hear how he/she did it.
THis is surely in the FAQ somewhere, which I'm sure gives a better
answer than I can.
A "Cygwin" application by definition is one that links against
cygwin1.dll. That is, it uses the Cygwin layer to provide a POSIX
interface. If you link against cygwin1.dll you cannot also link against
another crt (C runtime) library, because the two conflict. So, either
you must modify your VC++ code to not use any of the VC++ libraries, or
you must modify your Cygwin code so that it doesn't link against
cygwin1.dll. The latter is possible with the "-mno-cygwin" flag to gcc,
which turns it into mingw. Objects compiled that way will have no
dependance on cygwin1.dll, but they will also have no support for the
POSIX compatibility that Cygwin provides. So, you can't have your cake
and eat it too. If you want the functionality that Cygwin provides, you
must not use any other crt.
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html