Hey everyone! Today I managed to finish figuring out how to set up the build options for cross compiling, debugging and running windows executables for projects built with codeblocks using linux... As such, I decided it was time to sign up for the c::b forums and post a howto in case anyone else was interested in knowing what I did...
The following is how I did this on Ubuntu 'Dapper Drake' Linux:
Step 1:Install MingW32 for linux
# sudo apt-get install mingw32
Step 2:Settings->Compiler and debugger settings
Select GNU GCC Compiler and click the Copy button.
Name this: MingW32 Compiler
Step 3:Click the Compiler tab and then click the #defines tab.
Add the following:
WINVER=0x0400
__WIN95__
__GNUWIN32__
STRICT
HAVE_W32API_H
__WXMSW__
__WINDOWS__
Click the Linker tab and the following under "Other Linker Options":
-lstdc++
-lgcc
-lodbc32
-lwsock32
-lwinspool
-lwinmm
-lshell32
-lcomctl32
-lctl3d32
-lodbc32
-ladvapi32
-lodbc32
-lwsock32
-lopengl32
-lglu32
-lole32
-loleaut32
-luuid
*Note: Not all of these are REQUIRED... As I have been recently messing with compiling apps for windows with ogl and dx9 support I have realized that there are some additions I have needed to add here... I will update accordingly when I know more.
Step 4:Click the Directories tab and the Compiler tab.
Modify the path to read the following (where ix86 is your architecture type):
/usr/i586-mingw32msvc/include
Click the Directories tab and the Linker tab:
Modify the path to read the following (where ix86 is your architecture type):
/usr/i586-mingw32msvc/lib
Click the Directories tab and the Resource Compiler tab:
Modify the path to read the following (where ix86 is your architecture type):
/usr/i586-mingw32msvc/include
Step 5:Click the Programs tab:
C compiler: i586-mingw32msvc-gcc
C++ compiler: i586-mingw32msvc-g++
Linker for dynamic libs: i586-mingw32msvc-g++
Linker for static libs: i586-mingw32msvc-ar
Debugger: i586-mingw32msvc-gdb **** MORE ON THIS LATER ****
Click OK and save your changes.
Step 6:Ubuntu's mingw32 package and from what I can tell, MingW32 in general doesnt really have a solid gdb option for debugging natively in linux so we're going to work around this using wine and mingw32's latest insight build for windows
Install Wine
# sudo apt-get install wine
Step 7:Download Insight here:
http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=82725&release_id=371590
Step 8:Once you download insight.exe, extract the archive using wine:
I extracted this to my desktop
Step 9:Move the insight folder to /opt
the path should now look like
Step 10:create a shell script in /usr/bin:
(note: shell scripts should start with a hash (#) bang (!), ie: "# ! / bin / sh " [with no spaces] but when I add that the forum post tanks)
# sudo gedit /usr/bin/i586-mingw32msvc-gdb
and add the following:
wine /opt/insight/bin/gdb.exe "$@"
Save the file and quit gedit
Step 11:# sudo chmod +x /usr/bin/i586-mingw32msvc-gdb
Now we have a way to execute the windows version of mingw32's gdb for windows in linux using our shell script wrapper
Step 12:Create a new console application project in Codeblocks...
Using the wizard select the MingW32 Compiler option.
Step 13:Right click the project and go to properties. Click the Targets tab and set the Output Filename to be whatever you want with a .exe file extension. Make sure the Type is a Console Application.
Step 14:When I reached this step, compiled and tried to run my application I realized that for some reason codeblocks was trying to execute my .exe through /usr/bin/wine-auto (which I do not have)... So I created a simlink to wine:
# sudo ln -s /usr/bin/wine /usr/bin/wine-auto
Step 15:Hit F9 in codeblocks and the hello world application runs!! YAY!
Set a breakpoint on line 5 and hit F8 and the application breaks in the debugger!! Woot!
Now you can successfully compile, execute, and debug windows applications in linux using codeblocks!!!
While this worked perfectly for me on my set up please try this yourself and let me know if I can update this howto in any way.
A special thanks to all the codeblocks developers... Code::Blocks is the most awesome IDE for linux I've ever used.
*Update: Added note about libraries