Revision of <em>FAQ</em> from <em>2009, July 10 - 11:32</em>

Posted August 13th, 2007 by mingwadmin

FIXME: This page may have a number of dangling links, as a result of incomplete import of pages referenced from the old MinGWiki FAQ. If you find such a link, please help out, by copying and reformatting the originally referenced page content, to create the missing page.

Debugging

Documentation

I've built an Open Source package, containing documentation in manpage format; how do I read it?

Manpages are a documentation format prevalent on UNIX systems, where a special program called "man" is normally used to read them.

There is currently no "man" program available for MinGW/MSYS, although one is under development; (you may download a Development Snapshot, if you are prepared to compile it yourself; see the release notes for further information). In the meantime, you can use the "groff" program, available in this mingwPORT, to read manpages. This program is actually used by the "man" program itself, running a command similar to:--

groff -Tascii -pet -mandoc -P-c <manpage-file> | less -irs

To make it more convenient to view manpages, Wu Yongwei has provided these [[ManScript|scripts]], which implement a rudimentary version of a "man" program, for use with MSYS, or in a cmd.exe window.
Note that you will still need to have "groff" installed, when the full "man" package becomes available, if you wish to use "man" for reading documentation in the manpage format.

Another possible option to look into is using StarDict to view manpages. I've used the program to do so on Linux. It might be worth investigating whether there is a way to turn this plugin option on in the Windows port. The stardict-man-plugin should be the piece needed to get manpages displaying. The source for the Windows version appears to have been built with Microsoft Visual Studio not MinGW. Attempting to compile and build with MinGW (and using msys), I needed to patch some things just to get it to compile and build successfully and am still trying to resolve some issues with plugin libraries. If anyone's interested in investigating further, I think this has the potential to make a very nice alternative for reading man pages on Windows.

Licensing

How is MinGW licensed?

When Colin Peters released the MinGW runtime he placed the source into the PublicDomain. No one owns a copyright (C) to the source because of this. You as a software manufacturer are free to use the MinGW runtime in your proprietary and OpenSource software as you see fit. The only thing you can't do is to claim ownership of the source and use Colin Peters' name, the MinGW name or the name of any of it's contributors in endorsement of any product.

You may redistribute MSYS in part or in whole as long as you follow the guidelines of redistribution of each license contained within. To be certain that you are being legally compliant, always distribute the source. Distribution of source is your responsibility should you decide to redistribute MSYS. If you distribute MSYS via a web site then you must put a copy of the source for that version of MSYS on your web site as well. If you distribute MSYS via removable media then you must distribute that version of MSYS source with that same type of removable media.
Binaries created from the use of MSYS and of MinGW are not bound by any license found within this package unless you use a library that is itself covered by the GPL license. If you wish to create proprietary software then don't use libiberty.a or any other GPL licensed library. A library licensed with LGPL (Lesser GPL) may be used by proprietary software without GPL infection as special permission within the LGPL has given you this right.

So essentially unless you end up explicitly linking against msys-1.0.dll, programs built in MSYS shell using MSYS tools are not infected with GPL. Compiling and linking inside MSYS shell or using MSYS tools alone does not automatically link against the dll.

Please view MSYS_LICENSE.rtf for full license text.

MinGW related

What Languages Are Supported?

As of summer 2005, MinGW supports C, C++, ObjC, Fortran 77, Ada and Java. And last, but not least Pascal is available as a contributed package (GPC).

How do I use MinGW with Cygwin?

For those who would like to use the Cygwin environment for development, yet generate non-Cygwin-dependant executables, a much easier option to "-mno-cygwin" does exist. Simply install Cygwin and the MinGW distribution in separate directories (i.e. "C:\CYGWIN" and "C:\MINGW"), and make sure that the "/bin" subdirectory beneath your MinGW installation comes before Cygwin's "/bin" subdirectory in your PATH environment variable (i.e. "PATH=%PATH%;C:\MINGW\BIN;C:\CYGWIN\BIN"). This will allow you access to all the UNIX tools you want, while ensuring that the instance of GCC used is the MinGW version. %%%

Bear in mind that within the "/etc/profile" file, Cygwin by default places "/usr/local/bin", "/usr/bin", and "/bin" ahead of your system-level PATH. Therefore, it is not enough to have the MinGW's "/bin" ahead of Cygwin in your Windows path... it must also be set to come first within the Cygwin environment (either by modifying "/etc/profile" or setting it manually).

Is support provided for COM?

MinGW has some support for COM programs. Programmers have had much better luck writing COM applications in C than C++. Work is in progress to improve support. Check the MinGW mailing list archives for more details on COM and more links to example files.

What's the difference between gcc and mingw32-gcc?

The mingw32-gcc, mingw32-g++, etc. binaries exist as an aid to cross development. They are created in a typical build of gcc. They are therefore distributed as the maintainers of GCC meant them to be. The gcc.exe indicates that the binary produces binaries for a target equal to the build, while the mingw32-gcc binary produces binaries to be executed on the mingw32 target.

What's the difference between make and mingw32-make?

The "native" (i.e.: MSVCRT dependent) port of make is lacking in some functionality and has modified functionality due to the lack of POSIX on Win32. There also exists a version of make in the MSYS distribution that is dependent on the MSYS runtime. This port operates more as make was intended to operate and gives less headaches during execution. Based on this, the MinGW developers/maintainers/packagers decided it would be best to rename the native version so that both the "native" version and the MSYS version could be present at the same time without file name collision.

A tutorial to create a Java Native Interface DLL can be found here: JNI-MinGW-DLL

MSYS related

My programs don't print output; how do I fix this?

This is a long standing issue. Page programs not print in MSYS holds information on bypassing this problem. If you're program is not printing to the screen within MSYS, you can try running MSYS with the standard Windows console instead of with rxvt. You'll want a copy of MSYS after version 1.0.10. Add --norxvt to a shortcut that runs msys.bat. This will allow you to run MSYS in a standard Windows console. If your problem is with stdio when using rxvt, you should be able to invoke your programs and see output to the screen while in this mode.

How do I pass switches with forward slashes to programs under MSYS?

Please view page [switches with forward slashes]. You can try using a slash as an escape operator. Anywhere a slash would normally appear, try substituting two slashs.

Other

As of Python 2.5, the official distribution is built with MS-VC 2003. Python requires that all extensions be built with the same compiler. It is however possible to build such extensions using MinGW with the help of MSYS. Create a file called pydistutils.cfg in your home directory with the following contents.

[build]
compiler=mingw32

Next, use pexports to export the python dll symbols. The library can typically be found under C:\WINDOWS\system32. Use the following command.

pexports /c/WINDOWS/system32/python25.dll >py25.def

Then, use the following command to build an import library.

dlltool -D python25.dll -d python25.def -l libpython25.a

Move libpython25.a to /mingw/lib. You may need to add -I"/path/to/python/include" to the gcc command line. You can now build and install the extensions by following standard UNIX instructions under MSYS.

How do I execute configure scripts?

Applications using a UNIX-style build process will typically require a shell environment and set of POSIX tools, for executing configure scripts and building the application. The Cygwin environment was once the only choice available to fill this role, although now the MSYS environment offers MinGW developers a more lightweight alternative. The use of both these environments with MinGW is described in MsysShell and MinGWShell. [FIXME] - This is confusing and doesn't describe the question. __EarnieBoyd__ __2006-04-19__

A Makefile can be thought of as a script that is processed by a "make" program. It allows large projects with many source files to compile in an automated way, as opposed to needing to compile each file by manually calling the compiler. It also allows for depedency checking, recompiling only modified files by checking timestamps.

The difficulty in getting pkg-config installed is due its circular depency on glib. To install pkg-config, you should first install the GTK-runtime, the installer is found at http://sourceforge.net/project/showfiles.php?group_id=121075. The pkg-config binary can be obtained from //www.gimp.org/~tml/gimp/win32/downloads.html. Place pkg-config.exe in your MinGW bin directory.