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 Message-Id: <200412122238.iBCMbvGM013362@pecan.cc.columbia.edu> From: "Daniel Starin" To: Cc: Subject: Re: Visual Studio linking Date: Sun, 12 Dec 2004 17:39:00 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-No-Spam-Score: Local X-IsSubscribed: yes Hi. I am also trying to use functions implemented in cygwin1.dll with Visual Studio as discussed below. After started a blank console application and following steps below, I get to linking which gives me the following error: Linking... LIBCMTD.lib(crt0.obj) : error LNK2005: _mainCRTStartup already defined in crt0.obj Any suggestions? Thanks, Dan --------------------------------------------------------------- From http://www.cygwin.com/ml/cygwin/2004-06/msg00274.html And Faq... To all those who said it couldn't be done...I've done it :) Hahahaha. Seriously, it is quite easy once you figure it out, and I am sure there are plenty of people who helped write Cygwin who probably knew but couldn't be bothered to tell me. It involves a couple of minor hacks. It would be nice if cygwin1.dll could export the cygwin_crt0() function. Here is how you do it: 1) Use the impdef program to generate a .def file for the cygwin1.dll impdef cygwin1.dll > cygwin1.def 2) Use the MS VS linker (lib) to generate an import library lib /def=cygwin1.def /out=cygwin1.lib 3) Create a file "my_crt0.c" with the following contents #include #include typedef int (*MainFunc) (int argc, char *argv[], char **env); void my_crt0 (MainFunc f) { cygwin_crt0(f); } 4) Use gcc in a Cygwin prompt to build my_crt0.c into a DLL (e.g. my_crt0.dll). Follow steps 1 and 2 to generate .def and .lib files for the DLL. 5) Download crt0.c from the cygwin website and include it in your sources. Modify it to call my_crt0() instead of cygwin_crt0(). 6) Build your object files using the MS VC compiler cl. 7) Link your object files, cygwin1.lib, and my_crt0.lib (or whatever you called it) into the executable. Note that if you are using any other Cygwin based libraries that you will probably need to build them as DLLs using gcc and then generate import libraries for the MS VC linker. Alastair. -- 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/