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 Reply-To: Cygwin List Message-Id: <6.0.1.1.0.20040123110500.03a29000@127.0.0.1> X-Sender: Date: Fri, 23 Jan 2004 11:06:49 -0500 To: cygwin AT cygwin DOT com From: Larry Hall Subject: Re: Linking VC++ apps to cygwin-based DLLs In-Reply-To: <4010BD8D.E671419@dessent.net> References: <4010BD8D DOT E671419 AT dessent DOT net> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" At 01:22 AM 1/23/2004, Brian Dessent you wrote: >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. And you must interface to your DLLs as C-callable functions, not as C++ functions or classes. -- Larry Hall http://www.rfk.com RFK Partners, Inc. (508) 893-9779 - RFK Office 838 Washington Street (508) 893-9889 - FAX Holliston, MA 01746 -- 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/