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: Visual Studio linking


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 <sys/cygwin.h>
#include <stdlib.h>

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/


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