8

I have cygwin on windows through which I run gcc. But after creating .exe files, if I run them on other computers which dont have cygwin, it says cygwin1.dll not found. Is there a way to compile them so that they run on any system?

5 Answers 5

12

In your case, try to copy cygwin1.dll as well (but it could depend on other DLLs as well) (of course you must comply with Cygwin's license with regards to distributing cygwin1.dll)
In cygwin, you can always check the needed modules using:

objdump -p a.exe | grep 'DLL Name'

OR

cygcheck ./a.exe

or for windows in general, use something like this tool: Dependency Walker

1
  • cygcheck says: "Error: could not find a.exe" if I write "cygcheck a.exe"
    – avd
    Commented Sep 25, 2009 at 7:28
12

You need to compile for MinGW (Minimal GNU Win32) mode. You do that by either installing mingw instead of (or in addition to) cygwin, or by passing the --mno-cygwin compiler option to the cygwin gcc.

2
  • But i m using fork function in my program. If I use -mno-cygwin, it says fork not defined.
    – avd
    Commented Sep 25, 2009 at 6:27
  • 2
    Then you will have to provide cygwin1.dll to your users. Windows itself does not provide a fork() system call. It would be best to rewrite your code to not use fork anymore. Commented Sep 25, 2009 at 7:43
4

You can try compiling with the command line option -mno-cygwin.

0

See the Cygwin FAQ.

0
0

From http://cygwin.com/faq/faq.html#faq.programming.win32-no-cygwin

How do I compile a Win32 executable that doesn't use Cygwin?

The compilers provided by the mingw-gcc, mingw64-i686-gcc, and mingw64-x86_64-gcc packages link against standard Microsoft DLLs instead of Cygwin. This is desirable for native Windows programs that don't need a UNIX emulation layer.

This is not to be confused with 'MinGW' (Minimalist GNU for Windows), which is a completely separate effort.

Not the answer you're looking for? Browse other questions tagged or ask your own question.