Editing Free Compiler Setup
Jump to navigation
Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
− | This page documents the travails and heartache necessary to get the | + | This page documents the travails and heartache necessary to get the MSVC++ 2005 Express Edition to compile Orbiter projects. |
− | |||
− | |||
== Requirements == | == Requirements == | ||
=== Get the Compiler === | === Get the Compiler === | ||
− | Go to the [ | + | Go to the [http://msdn.microsoft.com/vstudio/express/visualc/download/ Microsoft download center] and get the compiler. |
Tell the program you are agreeing to its pernicious license agreement, but do it with your fingers crossed. | Tell the program you are agreeing to its pernicious license agreement, but do it with your fingers crossed. | ||
− | + | Get the Graphical IDE, but not MSDN or SQL stuff. | |
=== Get Orbiter and the SDK === | === Get Orbiter and the SDK === | ||
− | Get Orbiter from [ | + | Get Orbiter and the OrbiterSDK from [http://www.orbitersim.com/ Orbitersim.com] and unpack it. |
+ | |||
+ | For the latest version of Orbiter, 2006-P1, you need the following files: | ||
− | + | #Orbiter Base (060929) | |
+ | #Orbiter SDK (060929) | ||
− | For the older Orbiter | + | For the older Orbiter 06 version, you need the following files: |
− | + | #Orbiter Base (060504) | |
+ | #Orbiter SDK (060504) | ||
− | #Orbiter Base ( | + | For the older Orbiter 05 version, you need at least 4 files: |
− | #Orbiter SDK ( | + | |
+ | #Orbiter Base (050116) | ||
+ | #Orbiter SDK (050116) | ||
+ | #Orbiter Base Patch (050216) | ||
+ | #Orbiter SDK Patch (050216) | ||
Unpack all these files into the same folder, in order. A good choice is <tt>C:\Orbiter</tt>. This document assumes you use this path, from now on. | Unpack all these files into the same folder, in order. A good choice is <tt>C:\Orbiter</tt>. This document assumes you use this path, from now on. | ||
− | When installing the patches, it will | + | When installing the patches, it will if it is ok to replace a file. Say ''yes to all''. |
=== Get the Windows SDK === | === Get the Windows SDK === | ||
Line 33: | Line 39: | ||
You need the SDK to get <tt>windows.h</tt> and its associated files. | You need the SDK to get <tt>windows.h</tt> and its associated files. | ||
− | + | Go to [http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en here] to get the Windows Platform SDK. It says it is the Windows 2003 Server SDK but it includes what we want. (Note that you can now download the SDK rather than running the installer directly from your Windows machine.) Run the installer and uncheck everything but what is shown below. | |
− | |||
− | Run the installer and uncheck everything but what is shown below. | ||
[[Image:SDKInstall1.png]] | [[Image:SDKInstall1.png]] | ||
Line 41: | Line 45: | ||
== Setting up a project == | == Setting up a project == | ||
− | VC++ 2003 files are not perfectly compatible with VC++ 2005, and the non-free version is not perfectly compatible with the free version. | + | VC++ 2003 files are not perfectly compatible with VC++ 2005, and the non-free version is not perfectly compatible with the free version. There are several changes that you need to make to the project to get it to compile. Fortunately, they are small, and the same for all projects. |
We will modify the ShuttlePB project to work with the VC++2005. Start VC++, and open the project file <tt>OrbiterSDK\samples\ShuttlePB\ShuttlePB.dsw</tt>. | We will modify the ShuttlePB project to work with the VC++2005. Start VC++, and open the project file <tt>OrbiterSDK\samples\ShuttlePB\ShuttlePB.dsw</tt>. | ||
Line 59: | Line 63: | ||
=== Library path === | === Library path === | ||
− | Add the SDK library path for both the Platform SDK and the Orbiter SDK to the linker library path. The Platform SDK path default is <tt>C:\Program Files\Microsoft Platform SDK\lib</tt>. The Orbiter SDK default is <tt>C:\Orbiter\Orbitersdk\lib</tt> | + | Add the SDK library path for both the Platform SDK and the Orbiter SDK to the linker library path. The Platform SDK path default is <tt>C:\Program Files\Microsoft Platform SDK\lib</tt>. The Orbiter SDK default is <tt>C:\Orbiter\Orbitersdk\lib</tt> |
[[Image:SDKInstall5.png]] | [[Image:SDKInstall5.png]] | ||
− | + | === C++ language change === | |
There are a few important changes between code for Visual C++ 2005 and earlier versions. Fortunately, only small modifications to the code are required to compensate for them. | There are a few important changes between code for Visual C++ 2005 and earlier versions. Fortunately, only small modifications to the code are required to compensate for them. | ||
− | First, load OrbiterAPI.h and change the reference to <tt><fstream.h></tt> to <tt><fstream></tt> so it will find the renamed header file correctly | + | First, load OrbiterAPI.h and change the reference to <tt><fstream.h></tt> to <tt><fstream></tt> so it will find the renamed header file correctly. |
If you were to try to build the project after making that change, it would still fail on line 43 of <tt>ShuttlePB.cpp</tt>. | If you were to try to build the project after making that change, it would still fail on line 43 of <tt>ShuttlePB.cpp</tt>. | ||
Line 94: | Line 98: | ||
Note that to allow backwards compatibility it's best to always define a for() loop variable outside the loop in this manner, even when no code tries to access the variable outside the loop. Otherwise, if, for example, you include two for() loops in the same function which both define <tt>int i</tt> as their loop variable, it will compile in VC++2005 but fail to compile in older versions. | Note that to allow backwards compatibility it's best to always define a for() loop variable outside the loop in this manner, even when no code tries to access the variable outside the loop. Otherwise, if, for example, you include two for() loops in the same function which both define <tt>int i</tt> as their loop variable, it will compile in VC++2005 but fail to compile in older versions. | ||
− | There is an option in the project compiler settings window which changes this particular standard, but the code change makes the code clearer and more readable, and, more importantly, it's now correct C++ code according to the C++ standard. | + | There is an option in the project compiler settings window which changes this particular standard, but the code change makes the code clearer and more readable, and, more importantly, it's now correct C++ code according to the C++ standard. |
=== Adding and Removing libraries === | === Adding and Removing libraries === | ||
Line 108: | Line 112: | ||
== Compiling and adding resource files == | == Compiling and adding resource files == | ||
− | + | VC++ Express doesn't support the compilation of resource files (.res) from source files (such as bitmaps .bmp). However, there is a command line resource compiler (rc.exe) which is installed when you install VC++ Express. The default location for this program is C:\Program Files\Microsoft Visual Studio 8\VC\Bin\rc.exe. | |
− | |||
− | |||
rc.exe takes as its input a resource description file (.rc) and emits a resource file (.res). Take the example of two bitmaps called panel.bmp and panelLight.bmp. In order to compile these resources create a .rc file which is effectively a text file describing the resources to compile. To compile the above example you would a text file with the following text and save it as a .rc file (in our case panels.rc). | rc.exe takes as its input a resource description file (.rc) and emits a resource file (.res). Take the example of two bitmaps called panel.bmp and panelLight.bmp. In order to compile these resources create a .rc file which is effectively a text file describing the resources to compile. To compile the above example you would a text file with the following text and save it as a .rc file (in our case panels.rc). | ||
Line 128: | Line 130: | ||
Use the menu option Build/Build ShuttlePB to compile. It should now compile cleanly, no errors or warnings. The DLL will be in <tt>C:\Orbiter\Modules\ShuttlePB.dll</tt>. If you are making an MFD or plugin, you will want those to compile into the <tt>C:\Orbiter\Modules\Plugin</tt> folder. If you go look up this module, it should have the current time, and be accompanied by a .exp and a .lib file, both of which have the current date on them. Load any scenario which uses ShuttlePB and fly it normally. | Use the menu option Build/Build ShuttlePB to compile. It should now compile cleanly, no errors or warnings. The DLL will be in <tt>C:\Orbiter\Modules\ShuttlePB.dll</tt>. If you are making an MFD or plugin, you will want those to compile into the <tt>C:\Orbiter\Modules\Plugin</tt> folder. If you go look up this module, it should have the current time, and be accompanied by a .exp and a .lib file, both of which have the current date on them. Load any scenario which uses ShuttlePB and fly it normally. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Sharing the addon == | == Sharing the addon == | ||
Line 157: | Line 142: | ||
Once the project has been saved VC++2005 will have created a number of new files in the original directory. To reopen the project at a later date you should open the .sln file, as opposed to the original .dsw file. If you open the project from the .sln file all of the changes you made in the previous section will be intact as opposed to going through the process of conversion again. | Once the project has been saved VC++2005 will have created a number of new files in the original directory. To reopen the project at a later date you should open the .sln file, as opposed to the original .dsw file. If you open the project from the .sln file all of the changes you made in the previous section will be intact as opposed to going through the process of conversion again. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== To Do == | == To Do == | ||
*Check if this compiles vessels with panels. | *Check if this compiles vessels with panels. | ||
Line 202: | Line 147: | ||
{{HasPrecis}} | {{HasPrecis}} | ||
− | + | [[Category:Tutorials]][[Category:Addon tutorials]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | [[Category:Tutorials]][[Category: |