User forums > Using Code::Blocks

Howto - Cross Compiling in Linux using MingW32

(1/24) > >>

visualphoenix:
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

--- Code: ---# sudo apt-get install mingw32

--- End code ---

Step 2:

Settings->Compiler and debugger settings

--- Code: --- Select GNU GCC Compiler and click the Copy button.
 Name this: MingW32 Compiler

--- End code ---

Step 3:

Click the Compiler tab and then click the #defines tab.
 Add the following:

--- Code: ---  WINVER=0x0400
  __WIN95__
  __GNUWIN32__
  STRICT
  HAVE_W32API_H
  __WXMSW__
  __WINDOWS__

--- End code ---

Click the Linker tab and the following under "Other Linker Options":

--- Code: ----lstdc++
-lgcc
-lodbc32
-lwsock32
-lwinspool
-lwinmm
-lshell32
-lcomctl32
-lctl3d32
-lodbc32
-ladvapi32
-lodbc32
-lwsock32
-lopengl32
-lglu32
-lole32
-loleaut32
-luuid

--- End code ---
*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.

--- Code: --- Modify the path to read the following (where ix86 is your architecture type):
 /usr/i586-mingw32msvc/include

--- End code ---

Click the Directories tab and the Linker tab:

--- Code: --- Modify the path to read the following (where ix86 is your architecture type):
 /usr/i586-mingw32msvc/lib

--- End code ---

Click the Directories tab and the Resource Compiler tab:

--- Code: --- Modify the path to read the following (where ix86 is your architecture type):
 /usr/i586-mingw32msvc/include

--- End code ---

Step 5:

Click the Programs tab:

--- Code: --- 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 ****

--- End code ---

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

--- Code: ---# sudo apt-get install wine

--- End code ---

Step 7:

Download Insight here:

--- Code: ---http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=82725&release_id=371590

--- End code ---

Step 8:

Once you download insight.exe, extract the archive using wine:

--- Code: ---wine insight.exe

--- End code ---
I extracted this to my desktop

Step 9:

Move the insight folder to /opt

the path should now look like

--- Code: ---/opt/insight/bin/gdb.exe
--- End code ---

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)

--- Code: ---# sudo gedit /usr/bin/i586-mingw32msvc-gdb

--- End code ---
and add the following:

--- Code: ---wine /opt/insight/bin/gdb.exe "$@"

--- End code ---

Save the file and quit gedit

Step 11:

--- Code: ---# sudo chmod +x /usr/bin/i586-mingw32msvc-gdb

--- End code ---
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:

--- Code: ---# sudo ln -s /usr/bin/wine /usr/bin/wine-auto

--- End code ---

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

mandrav:
Impressive and detailed HOWTO! Thanks :)

killerbot:

--- Quote ---  __WIN95__
--- End quote ---

Is this needed for every windows version (say win XP sp2) ??

MortenMacFly:
Well, I'd say this should definitely go into the WiKi. Great article!
If there are no objections, visualphoenix: Would you do that?
With regards, Morten.

Michael:
Hello,

Interesting really :). Good job.

Anyway, there was also my lost post... :)

http://forums.codeblocks.org/index.php?topic=2688.0

Best wishes,
Michael

Navigation

[0] Message Index

[#] Next page

Go to full version