Friday, September 14, 2012
Thursday, September 13, 2012
Compile xz for Windows using MinGW
xz is the new popular compression format. To build xz tools and libraries, I issued the following commands.
./configure --prefix=/mingw --disable-shared --disable-nls --disable-lzma-links --disable-scripts
make
make install
I got the following files:
lzmadec.exe
lzmainfo.exe
unxz.exe
xz.exe
xzcat.exe
xzdec.exe
Note that xz can be used to create and decompress lzma files also.
Wednesday, September 12, 2012
Compile libcddb for Windows
libcddb is used to query for information about audio Compact Discs that has been loaded in media players and CD rippers. Compiling libcddb is not so hard with MinGW.
First, I installed MinGW. I compiled zlib and libiconv.
Then, I compiled libcdio. I downloaded the latest development source from its git web server.
./autogen.sh
./configure --prefix=/mingw
make
make installI compiled libcddb like this:
./configure --prefix=/mingw
make
make install
FLAC for Windows
FLAC, short for Free Lossless Audio Codec, is an audio format similar to MP3, but lossless. Thus, audio compressed in FLAC has no loss in quality. With digital storage getting cheaper everyday, it makes sense to copy or preserve sound in the near-perfect quality. I'm compiling FLAC with MinGW because it's needed by some programs I want to build.
I installed MinGW, of course. I also instaled NASM because it was suggested during configure. I just downloaded yasm-1.2.0-win32.exe and renamed it as nasm.exe.
I think it's not necessary, but I compiled zlib and libiconv.
I built OGG.
./configure --prefix=/mingw
make
make installThen, I built FLAC.
./configure --prefix=/mingw --enable-sse
The --enable-sse option is for SSE-capable CPU's which mean nearly all new desktop CPU's today. I began
make
.make
I got errors about SIZE_T_MAX. To fix it, I just changed the line 38 in flac-1.2.1/include/share/alloc.h
# if defined _MSC_VER || defined __MINGW32__
I got another error compiling examples/cpp/encode/file/main.cpp. To fix it, I inserted the following line after <stdlib.h> on line 33.
#include <string.h>
I got no more error. I installed flac.
make install
Tuesday, September 11, 2012
Kung Fu Hustle (2004) 功夫
Kung Fu Hustle is a funny but memorable movie from Hong Kong star Stephen Chow. If you haven't seen it yet, here's your chance to watch the movie.
And the one below is the original Chinese version with English subtitles.
Compile libRTMP with MinGW
The libRTMP library provides online multimedia streaming support for many open-source projects, such as ffmpeg and curl. I am building librtmp for use with ffmpeg and mplayer. I downloaded the latest release tarball from here.
First, I compiled zlib as shown in this post.
make -f win32/Makefile.gcc
cp -iv zlib1.dll /mingw/bin
cp -iv zconf.h zlib.h /mingw/include
cp -iv libz.a /mingw/lib
cp -iv libz.dll.a /mingw/libThen, I built OpenSSL as shown in this post.
./Configure -DHAVE_STRUCT_TIMESPEC -L/mingw/lib -lz -lpthreadGC2 -lws2_32 --prefix=/mingw threads zlib mingw
make
make installThen, I built librtmp.
make SYS=mingw
cp -iv *.exe /mingw/binTo build the shared library, I typed:
cd librtmp
gcc -shared -o librtmp.dll -Wl,--out-implib,librtmp.dll.a rtmp.o log.o amf.o hashswf.o parseurl.o -lssl -lcrypto -lz -lws2_32 -lwinmm -lgdi32To install librtmp, I typed the following:
cp -iv librtmp.dll /mingw/bin
cp -iv amf.h http.h log.h rtmp.h /mingw/include/librtmp
cp -iv librtmp*.a /mingw/lib
cp -iv librtmp.pc /mingw/lib/pkgconfigSometimes, librtmp.pc fails to be generated. In that case, make it yourself and copy it to /mingw/lib/pkgconfig.
prefix=/mingw
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
incdir=${prefix}/include/librtmp
Name: librtmp
Description: RTMP implementation
Version: 2.3
Requires: openssl libcrypto
URL: http://rtmpdump.mplayerhq.hu
Libs: -L${libdir} -lrtmp -lz
Libs.private: -lws2_32 -lwinmm -lgdi32 -lssl -lcrypto
Cflags: -I${incdir}
Monday, September 10, 2012
Build OpenSSL with MinGW
OpenSSL is an open-source library that provides cryptographic and network security functions. It is used by so many open-source software that require SSL/TLS support. To build OpenSSL for Windows, first install MinGW. There are two flavors of MinGW: mingw and mingw64. Just pick one of the following and set it up accordingly:
Then, download the latest source tarball from the OpenSSL website and unpack it with 7-zip. 7-zip should be used because MinGW/MSYS tar has trouble with tarballs containing symlinks. However, cygwin has no problem with tarballs containing symlinks.
OpenSSL optionally incorporates the following libraries when found.
Assuming that you compiled both zlib and pthread as shown in the above links, configure OpenSSL like this.
./Configure -DHAVE_STRUCT_TIMESPEC -DPTW32_STATIC_LIB -L/mingw/lib -lz -lpthreadGC2 -lws2_32 --prefix=/mingw threads zlib mingw
Then, run make.
make
If you run into errors compiling some test codes, just copy dummytest.c over. However, it doesn't happen under Cygwin.
cp -iv test/dummytest.c test/md2test.c
cp -iv test/dummytest.c test/rc5test.c
cp -iv test/dummytest.c test/jpaketest.c
Then, install OpenSSL.
make install
To Build the Live555 library with MinGW
The Live555 streaming media library is an open-source implementation of RTP/RTCP/RTSP/SIP multimedia streaming protocols. I mainly use it with MPlayer. To compile it with MinGW, download the source for live555 library and extract the tarball under /mingw/lib:
cd /mingw/lib
tar xzvf live555-latest.tar.gz
cd live
compile it like this:
./genMakefiles mingw
make
Live555 and MPlayer
Normally, mplayer will detect the live555 library automatically. If not, append --enable-live
to the ./configure command.
- Append the following text to CXXFLAGS= line.
-I/mingw/lib/live/liveMedia/include -I/mingw/lib/live/UsageEnvironment/include -I/mingw/lib/live/BasicUsageEnvironment/include -I/mingw/lib/live/groupsock/include
- Append the following text to EXTRALIBS= line.
/mingw/lib/live/liveMedia/libliveMedia.a /mingw/lib/live/UsageEnvironment/libUsageEnvironment.a /mingw/lib/live/BasicUsageEnvironment/libBasicUsageEnvironment.a /mingw/lib/live/groupsock/libgroupsock.a -lstdc++
Creating a Shared Library for live555
To create a shared library from the static live555 libraries, I ran the following command:
gcc -shared -o livemedia.dll -Wl,--out-implib,liblivemedia.dll.a -Wl,--whole-archive liveMedia/libliveMedia.a UsageEnvironment/libUsageEnvironment.a BasicUsageEnvironment/libBasicUsageEnvironment.a groupsock/libgroupsock.a -Wl,--no-whole-archive -lstdc++ -lws2_32
I got livemedia.dll and liblivemedia.dll.a. I copied these files under MinGW.
cp -iv livemedia.dll /mingw/bin
cp -iv liblivemedia.dll.a /mingw/lib
To use these files, I would define environment variables as follows:
CXXFLAGS='-I/mingw/lib/live/liveMedia/include -I/mingw/lib/live/UsageEnvironment/include -I/mingw/lib/live/BasicUsageEnvironment/include -I/mingw/lib/live/groupsock/include'
LIBS='-lstdc++ /mingw/lib/liblivemedia.dll.a'
Bonsai Rock Study #2 - Lake Tahoe, Nevada, USA by Rich Capture
Bonsai by Rob Birchard
Bonsai Rock Lake Tahoe IV by Joe Y Jiang
Sunday, September 9, 2012
Hilariously Awesome Martial Arts Classic: The Story of Ricky (电影: 力王)
Do you like classic horror movies or a Chinese kung-fu movie? Then, you may like the Hong Kong movie, “Ricki Oh: the Story of Ricky.” It's got both: blood and gore, and awesome kung fu. The fight scenes are gross and brutal like Kill Bill, but otherwise have outrageously cool kung-fu moves. However, I warn that some viewer discretion is advised.
Here's the same movie in Mandarin Chinese.
Saturday, September 8, 2012
Building MPlayer and Mencoder for Windows
MPlayer is one of my favorite media players. It is used with a frontend like smplayer, gnome-mplayer and MPlayerGUI to provide a good alternative to Windows Media Player. Although there are already several Win32 builds of MPlayer on the net, I like to build MPlayer on my own using MinGW compiler because I want to optimize my build for my CPU. So I installed MinGW and compiled MPlayer as follows.
Build ffmpeg statically or dynamically as shown in this post.
- (Optional) Compile the lzo library:
./configure --prefix=/mingw && make && make install
(Optional) Fribidi is a rendering library for right-to-left scripts, such as Arabic and Hebrew. If you are a speaker of such right-to-left languages, compile fribidi statically as shown below:
./configure --prefix=/mingw --disable-shared --disable-debug
make
make installMore information can be found here.
- Download JPEG source from ijg.org and complie JPEG:
./configure --prefix=/mingw --enable-static
make
make install - Compile libPNG:
./configure --prefix=/mingw --disable-shared
make
make install - Compile libiconv, Freetype, expat and fontconfig statically in that order:
./configure --prefix=/mingw --disable-shared
make install - Compile libdca:
./configure --prefix=/mingw
make
make install - (Optional) Download DirectX headers from any of the following locations and unpack them in /mingw/include:
- http://www.videolan.org/vlc/dx7headers.tgz
- http://www.mplayerhq.hu/MPlayer/contrib/win32/dx7headers.tgz
- http://www.videolan.org/vlc/dx7headers.tgz
- Download the latest mplayer source (mplayer-export-snapshot.tar.bz2) and unpack it. (patch 1 and patch 2)
tar xjvf mplayer-export-snapshot.tar.bz2
cd mplayer-export-2010-02-07/Then, run
./configure
:CPPFLAGS='-DFRIBIDI_ENTRY="" ' ./configure --prefix=/mingw --enable-runtime-cpudetection --enable-static --enable-theora --enable-fribidi --disable-ffmpeg_a --disable-gl --disable-vidix --yasm=/mingw/bin/yasm --extra-libs='-lfribidi'
The CPPFLAGS value allows fribidi to be linked statically.
- Build Mplayer:
make
After successful build, strip the executables:
strip m*.exe
Optionally, compress the executables with upx:
upx --best --strip-relocs=0 mplayer.exe
upx --best --strip-relocs=0 mencoder.exe Download MPlayer codecs from here. The MPlayer codecs for Windows platform has a filename like windows-essential-20071007.zip. Extract the codecs package and you'll get a folder "windows-essential-20071007". Rename it as "codecs" and move the "codecs" folder inside where mplayer.exe file is located.
Make sure that HOME environment variable is set to your personal folder(for example, C:\Users\Jocelyn). Upon the first run of mplayer, a new folder named
mplayer
will be created in your HOME folder. Copy codecs.conf to themplayer
folder. The "config" file stores default options for playing movie files. Open the "config" file and make changes as follows:# Write your default config options here!
cdrom-device=D:
dvd-device=D:
ao=dsound
vo=direct3d
font=C:\WINDOWS\FONTS\MALGUN.TTF
framedrop=yes
subcp=cp949
My win32 build of mplayer can be downloaded from here. It is recommended that the zip archive should be extracted in C:\Program Files
.
Running MPlayer
Now, let's try mplayer. First, get a movie file ready. In the Command Prompt, type a command in the following form:
mplayer mymoviefile.avi
Alternatively,
mplayer -vo direct3d -ao win32 -font C:\WINDOWS\FONTS\Tahoma.ttf -framedrop mymoviefile.avi
A new window will pop up with the movie playing inside it.
The next step is to get and set up SMPlayer.
Friday, September 7, 2012
Building cdrkit for Windows
cdrkit is another CD/DVD burning tool that was spun off from the cdrtools project. Some say cdrkit is inferior to cdrtools, but I haven't found a problem with cdrkit yet. Although I prefer cdrtools to cdrkit, I'd like to give cdrkit a try. To build cdrkit with MinGW, I had to compile some libraries first.
- zlib
First, I compiled zlib:
tar xzvf zlib-1.2.7.tar.gz
cd zlib-1.2.7
make -f win32/Makefile.gcc
cp -iv zlib1.dll /mingw/bin
cp -iv zconf.h zlib.h /mingw/include
cp -iv libz.a /mingw/lib
cp -iv libz.dll.a /mingw/lib - POSIX threads for Win32
New genisoimage seems to use pthread for making checksums. I compiled pthread like this:
make clean GC
cp -iv pthreadGC2.dll /mingw/bin
cp -iv pthread.h semaphore.h sched.h /mingw/include/
cp -iv libpthreadGC2.a /mingw/lib
cp -iv libpthreadGC2.a /mingw/lib/libpthread.a - PCRE
Then, I compile PCRE:
./configure --prefix=/mingw --enable-pcre16 --enable-unicode-properties
make
make install
cp /mingw/include/pcreposix.h /mingw/include/regex.h
cp /mingw/lib/libpcreposix.a /mingw/lib/libregex.a
cp /mingw/lib/libpcreposix.dll.a /mingw/lib/libregex.dll.a - libmagic
I built the open-source file command. I configured it like this:
./configure --prefix=/mingw
Then, I added the following lines to
config.h
:#define WIN32 1
#define MAGIC "magic"Compile libmagic:
make && make install
I got an error trying to build file.exe, so I modified src/Makefile:
file_LDADD = libmagic.la /mingw/lib/libpcreposix.dll.a
- libiconv
I built libiconv like this:
./configure --prefix=/mingw
make
make install - CMake
Then, I built CMake.
./bootstrap --prefix=/mingw
make
make install - cdrkit
I unpacked the cdrkit source and applied the patch that I found at the mailing list. Here are the modified patches of mine.
I used the command below to applied the patch.
patch -p1 -l < ../cdrkit-1.1.9-mingw.patch
Then, I compiled cdrkit:
cmake -G "MSYS Makefiles"
makeAfter successful build, I copied the executable files (*.exe) to my folder.
Issues and Fixes
I got an error linking genisoimage. I edited genisoimage/CMakeLists.txt to resolve the issue:
IF(USE_MAGIC)
ADD_DEFINITIONS(-DUSE_MAGIC)
LIST(APPEND EXTRA_LIBS "shlwapi")
SET(MAGICLIBS magic)
ENDIF(USE_MAGIC)I got errors compiling sha256.* and sha512.*. I made the following changes.
- I removed all lines that read #include <endian.h>.
- Assume the target machine is little endian.
- change all occurrences of
__THROW
to__attribute__ ((__nothrow__))
.
- I removed all lines that read #include <endian.h>.
The code in genisoimage/checksum.c gave me errors linking with pthread-w32. To fix it, I replaced
a->thread
with(a->thread).p
.I found that genisoimage and readom still used
/dev/null
. I changed it toNUL
in genisoimage.c and readom.c.
Download my cdrkit Build
Here's my cdrkit build for Windows.
Related Links
Thursday, September 6, 2012
Building cdrtools under Cygwin
cdrtools is a powerful open-source CD/DVD/BD burning tool. It is used as backend software for free DVD-burning applications, such as Infrarecorder and cdrtfe. To build cdrtools for Windows, install Cygwin as shown in this post. Additionally, I installed the following Cygwin packages.
- bison
- gcc4-core
- gcc4-g++
- gettext-devel
- libiconv
- libtool
- make
- patch
- pkg-config
I set up some environment variables before I started.
export CC=/usr/bin/gcc.exe
export CC_OPT="-O2"
export CFLAGS="-march=pentium2 -mtune=i586 -mthreads -mms-bitfields"
export LDFLAGS="-L/usr/lib -Wl,--enable-auto-image-base -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc"
Then, I built smake.
cd smake-1.2
make
make INS_BASE=/usr install
Then, I built cdrtools.
smake
smake INS_BASE=/usr install
Using cdrtools
I tested my cdrtools build. To create an ISO file from a folder, I ran mkisofs:
mkisofs -J -R -hide-rr-moved ~/Downloads > dl.iso
To burn an ISO:
cdrecord -scanbus
cdrecord dev=0,0,0 speed=8 driveropts=burnfree dl.iso
To make a copy of a data CD:
readcd dev=0,0,0 f=dl2.iso speed=8 retries=16 -nocorr -noerror
To scan a music CD, I ran cdda2wav:
cdda2wav -scanbus
cdda2wav dev=0,0,0 cddb=1 -cddbp-server=freedb.freedb.org -cddbp-port=8880 -J -N
To rip the second track of the music CD:
cdda2wav dev=0,0,0 cddb=1 track=2 ~/Music/track2.wav
Download my cdrtools build for Windows
Here you can get my cdrtools build.
Free cdrtools Graphical Interfaces for Windows
If you don't want to deal with the command line, there are, of course, user-friendly GUI frontends for cdrtools.
Related Links
Wednesday, September 5, 2012
Compiling CMake with MinGW
CMake is a portable build system. CMake can be used to replace the traditional GNU build process, as in:
./configure
make
make install
Compiling CMake is fairly simple. After you install MinGW (as shown in this post), download and unpack the CMake source tarball. Run the following commands in order.
tar xzvf cmake-2.8.9.tar.gz
cd cmake-2.8.9
./bootstrap --prefix=/mingw
make
make install
To Compile ffmpeg with MinGW
ffmpeg is an important component of many open-source projects, such as MPlayer and VLC. I am compiling ffmpeg so that I can use it to transcode multimedia files. This guide shows how to use MinGW to compile ffmpeg either statically or dynamically. Installation of MinGW is explained in this post. The example commands below are meant to be entered into an MSYS window (not Command Prompt). I downloaded the FFmpeg source and unpacked it.
Preparing External Libraries for FFMpeg
FFMpeg can be linked with external libraries to add features to FFmpeg. I am adding most features to FFMpeg by compiling additional libraries. Most of these libraries are also covered in my posts on compiling MPlayer and Mencoder.
- Compression Libraries: Zlib and bzLib
Get the zlib source (zlib127.zip), unzip and compile it:unzip zlib127.zip
cd zlib-1.2.7/
make -f win32/Makefile.gcc
cp -iv zlib1.dll /mingw/bin
cp -iv zconf.h zlib.h /mingw/include
cp -iv libz.a /mingw/lib
cp -iv libz.dll.a /mingw/libOptionally, get bzip2 source from bzip.org and compile it like this:
tar xzvf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6
make
cp bzlib.h /mingw/include/
cp libbz2.a /mingw/lib - libgsm
Download gsm-1.0.13.tar.bz2, unpack and compile it as follows:tar xzvf gsm-1.0.13.tar.bz2
cd gsm-1.0-pl13/
makeJust ignore the compile errors with fchmod and fchown when trying to build applications. Copy the header and static library to /mingw:
mkdir /mingw/include/gsm
cp inc/gsm.h /mingw/include/gsm
cp lib/libgsm.a /mingw/lib - LAME is an excellent MP3 encoder. LAME makes use of the nasm assembler if available. So download yasm and save it as /mingw/bin/nasm.exe. Then, download the LAME source from lame.sf.net and compile it like this.
./configure --prefix=/mingw --enable-expopt=full
make
make install - OGG, Vorbis, Speex and Theora
The source code for these libraries can be obtained from xiph.org. Compile them each like this:
./configure --prefix=/mingw
make
make installAs for speex, use the version 1.2rc1 or later.
- FAAC
FAAC is an MPEG-4 AAC audio encoder. Get the source (faac-1.28.tar.gz) and unpack the package. Then, edit Makefile.am:
SUBDIRS = include libfaac
Also, edit the line beginning with AC_OUTPUT in the file configure.in:
AC_OUTPUT(libfaac/Makefile include/Makefile Makefile)
Then, compile FAAC like this
sh bootstrap
./configure --prefix=/mingw
make
make install - XviD is a popular video encoder used to create movie files distributed in p2p networks. Xvid can use yasm assembler to build optimized binaries if found (
/mingw/bin/yasm.exe
). Get the XviD source from xvid.org and compile as follows:tar xzvf xvidcore-1.3.2.tar.gz
cd xvidcore/build/generic
./configure --prefix=/mingw
make
make installIf you encounter "unrecognized command-line option
-mno-cygwin
" errors, open the file platform.inc in a text editor and delete "-mno-cygwin". Then, runmake
andmake install
again.Copy the import library for xvidcore.dll:
cp -iv \=build/xvidcore.dll.a /mingw/lib/libxvidcore.a
- x264 is yet another good video encoder. x264 requires YASM to build an optimized executable. So get yasm and save it as /mingw/bin/yasm.exe. Then, compile x264 like this:
configure --prefix=/mingw --enable-win32thread --extra-cflags="-DX264_VERSION=20100422"
make
make install
cp -iv x264.h x264_config.h /mingw/include
cp -iv libx264.a /mingw/lib
cp -iv x264.pc /mingw/lib/pkgconfig - Compile librtmp as shown in this post.
Building FFMpeg Statically
You need pr.exe from MYS coreutils package (coreutils-5.97-3-msys-1.0.13-ext.tar.lzma). I configured ffmpeg with the following command:
CPPFLAGS='-DHAVE_INT32_T' ./configure --prefix=/mingw --enable-gpl --enable-nonfree --enable-postproc --enable-avfilter --enable-w32threads --enable-runtime-cpudetect --enable-memalign-hack --enable-bzlib --enable-libfaac --enable-libgsm --enable-libmp3lame --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --disable-debug
-DHAVE_INT32_T is used to allow static FAAC to be linked. Then, I began compilation and installation:
make
make install
Compiling FFmpeg Dynamically
Some Windows applications, such as Audacity, uses FFmpeg libraries when available. If you want to compile FFmpeg dynamically, append --enable-shared --disable-static
to the ./configure
command for FFmpeg.
./configure --prefix=/mingw --enable-gpl --enable-nonfree --enable-postproc --enable-avfilter --enable-w32threads --enable-runtime-cpudetect --enable-memalign-hack --enable-bzlib --enable-libfaac --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-shared --disable-static --disable-debug
If you get "int32_t" error when compiling libfaac.o, open /mingw/include/faac.h
and insert the following line:
#include <stdint.h>
When I built mplayer with --enable-static
and --disable-ffmpeg_a
options to force linking with shared ffmpeg libraries, I had to rename ffmpeg libraries so their names end in *.a.
cd /mingw/lib
cp -iv libavcodec.dll.a libavcodec.a
cp -iv libavformat.dll.a libavformat.a
cp -iv libavutil.dll.a libavutil.a
cp -iv libpostproc.dll.a libpostproc.a
cp -iv libswscale.dll.a libswscale.a
Tuesday, September 4, 2012
Using cdrtfe 1.5
cdrtfe is free CD/DVD/BD burning software for Windows. cdrtfe actually use the command-line program cdrtools as its burning engine. I have used cdrtools on Linux to create ISO images and burn or rip CD. I'd like to have cdrtools on Windows also. Fortunately, cdrtfe includes cdrtools Win32 binaries along with the nice-looking GUI application.
To install cdrtfe, I downloaded the cdrtfe zip archive (cdrtfe-1.5.zip) and unpacked the zip archive. Double-clicking on the cdrtfe file will start the cdrtfe program. (Warning: Running the Cygwin terminal and cdrtfe at the same time can cause a problem due to cygwin1.dll incompatibility, so close the Cygwin terminal before starting cdrtfe.)
So far, I have only tried ripping music CD's with cdrtfe. I will add more as I get to know more about cdrtfe.
Ripping Audio CD's
To rip a music CD, click on the DAE tab and click the Options button. Check to make sure the options are okay.
Back to the main window, click Read TOC to update the track list, check the Save tracks to folder, and click Start to begin ripping.
Sunday, September 2, 2012
Setting Up Cygwin For C/C++ Software Development on Windows
Cygwin provides a Unix-like environment for Windows users. Cygwin is useful for people who want to learn Unix or popular Linux without having to install Unix or Linux. Cygwin can also be used to port Linux applications to Windows or develop genuine Windows applications. To install Cygwin, download setup.exe from the Cygwin website and run it.
Cygwin Packages for Software Development
In addition to the default packages, select the following packages for common development environment:
- bison
- gettext-devel
- libtool
- make
- patch
- pkg-config
To select a package for installation, type the name of the package in the Search box, expand the categories by clicking a plus, and clicking on the package until its version number shows up.
If you want to develop software applications that depend on cygwin1.dll (which emulates Unix on Windows), install one of the following packages. This is when you want to port Linux applications to Windows with little modification.
- gcc-g++
outdated version 3.4.4 - gcc4-g++
GCC 4.x that links applications with cygwin1.dll
If you want to develop pure Windows applications, install one of the following packages.
- mingw-gcc-g++
The original MinGW compiler from mingw.org can't build 64-bit applications. - mingw64-i686-gcc-g++
New MinGW compiler from mingw-w64.sourceforge.net. - mingw64-x86_64-gcc-g++
Install these to develop 64-bit Windows applications.
When you see the Resolving Dependencies window, just accept and click Next.
Setting HOME Variable
Setting the environment variable %HOME% is useful for various reasons. First of all, it allows regular users to compile freely in their user folder without requiring access to C:\Cygwin. Secondly, it allows users to save user-specific configuration in their user folder. For example, user configuration files such as .profile, .gtkrc-2.0, .fonts.conf and .pango-aliases can be saved in the folder specified by %HOME%.
Setting Up mingw* compiler for Cygwin
The file C:\Cygwin\etc\fstab
is used to set up mount points in Cygwin. If you installed mingw64 packages, open the file C:\Cygwin\etc\fstab
in a text editor and append the following line.
/usr/i686-w64-mingw32/sys-root/mingw /mingw none bind
Start the Cygwin terminal and type the following commands to set up Cygwin for Windows compilation.
ln -s /usr/bin/i686-w64-mingw32-g++.exe /usr/i686-w64-mingw32/bin/g++.exe
ln -s /usr/bin/i686-w64-mingw32-gcc.exe /usr/i686-w64-mingw32/bin/gcc.exe
Also, set up some environment variables.
export CFLAGS="-march=pentium2 -mtune=i586 -mthreads -mms-bitfields -O2"
export CXXFLAGS="-march=pentium2 -mtune=i586 -mthreads -mms-bitfields -O2"
export CPPFLAGS="-I/mingw/include"
export LDFLAGS="-L/mingw/lib -Wl,--enable-auto-image-base -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc"
export PATH=/mingw/bin:/usr/i686-w64-mingw32/bin:/usr/local/bin:/usr/bin
export PKG_CONFIG_PATH=/mingw/lib/pkgconfig
Setting Up gcc* Compiler for Cygwin
If you installed the gcc4 compiler (as opposed to mingw*), set up some environment variables to customize your build environment. I usually type the following commands:
CC="/usr/bin/gcc.exe"
CFLAGS="-march=pentium2 -mtune=i586 -mthreads -mms-bitfields -O2"
CPPFLAGS="-I/usr/include"
CXXFLAGS="-march=pentium2 -mtune=i586 -mthreads -mms-bitfields -O2"
LDFLAGS="-L/usr/lib -Wl,--enable-auto-image-base -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc"
export CC CFLAGS CPPFLAGS CXXFLAGS LDFLAGS