Developing On Windows

From Audacity Wiki
Revision as of 10:03, 4 April 2011 by Mchinen (talk | contribs) (add tip to warn against building "Universal" wx dlls)
Jump to: navigation, search

Related pages:

It can help to work in stages. It's probably not advisable to try to do all the steps on this page in one session.

Visual Studio Express and Microsoft SDK

  • First get comfortable with Microsoft's free Visual Studio C++ Express. You can download a version from Microsoft. Many developers are using the 2008 version at the time of writing (May 2010) which can be found on a tab. I (Martyn) have had not made Audacity compile with 2010 yet.
  • To develop in C/C++ for Windows you need a second download from Microsoft, the "Platform SDK", or the later "Windows SDK". Check here for the one you require.
  • Don't forget to do a 'Windows Update' for any recent changes.

With MSVC set up you can write 'hello world' and similar small programs just to check things out, or use some of the examples that Microsoft provides. There is a Microsoft Forum for Visual C++ Express where you can get help with the program if you need it.

Download wxWidgets

Next get a recent version of wxWidgets. If you want to work with cutting edge code in Audacity, use wxWidgets 2.8.11 (the version officially supported by Audacity as at August 2010). Follow the instructions in the wxWidgets documentation to get some of the wxWidgets samples to compile. For in-depth reference there is a 700-page book: Cross-Platform GUI Programming with wxWidgets which is also available as a PDF download. Time spent reading the documentation and trying things out is time well spent. There is one detail in setting up wxWidgets which is very important. It's setting up the $(WXWIN) environment variable. It's not set by the installer. It must be set correctly to your wxWidgets directory if you're to compile Audacity. wxWidgets can be compiled in many different modes, such as Unicode and ANSI, debug and release, library or dll. If you want to work with the latest Audacity code, make sure that amongst the versions of wxWidgets that you compile is the DLL Unicode Debug version.

Don't try moving on further until you have at least one sample wxWidgets program compiled and running!

Set up for SVN

For Windows, TortoiseSVN is possibly the easiest client to use to get the code from the repository. It adds extra right-click menu items to the Explorer file manager. These are used for synchronising your local copy of the files with the repository. Any user can read the files and that's all you need at this stage.

Once TortoiseSVN is installed, in Explorer, create a folder for the source, right-click on it and select 'SVN Checkout...' then paste

into the first box and hit 'OK'. Wait a bit and you should have the source (about 230MB, May 2010).

If you have problems checking out the code, please e-mail our feedback address so we can look into it.

Compiling wxWidgets and Audacity

In May 2008 we made significant changes so that we build Audacity modularly. In the past, Audacity was always built against a custom monolithic non-DLL build of wxWidgets. This let us use multi-threaded wxWidgets while having Audacity as a single executable. But now we want to use plug-in modules in Audacity, and the modules and Audacity must both link to wxWidgets. Unfortunately it is not possible to embed the wxWidgets dll's into Audacity and share them as static links. So, Audacity will ship with these dll's and link to them dynamically. On the other hand, DLL builds of wxWidgets are automatically multi-threaded, so we no longer need a custom wxWidgets build.

As of 20 June 2008, there are now four configurations of Audacity, all modular. To build each, first build the appropriate configuration of Widgets for your required build of Audacity:

Audacity configuration Purpose Required wxWidgets build
Release General non-Unicode use DLL Release
Unicode Release General Unicode-based use DLL Unicode Release
Debug Slower performance, debuggable, no Unicode support DLL Debug
Unicode Debug Slower performance, debuggable, Unicode support DLL Unicode Debug

Build wxWidgets, set the environment variable, build Audacity

There are excellent instructions in the online compile.txt. Building Widgets is straightforward, but it's worth repeating that you need to exit Visual Studio and set the WXWIN environment variable before building Audacity.

Set the WXWIN evironment variable to "C:\wxWidgets-2.8.11" assuming you installed wxWidgets 2.8.11 into its standard location of C:\. To do this:
  • Windows 98/ME: edit AUTOEXEC.BAT to add a line "set WXWIN=C:\wxWidgets-2.8.11" (without quotes). It's safest to do this by running MSCONFIG, and click "New" on the "Autoexec.bat" tab.
  • Windows 2000 and later: Right-click over "My Computer", then follow any "Advanced" links to arrive at "System Properties". Click on "Advanced" then "Environment Variables". Add a user or system variable with name "WXWIN" and value "C:\wxWidgets-2.8.11" (without quotes).

Warning icon It is highly recommended to reboot the computer after setting WXWIN. It is definitely essential on Windows 98/ME, and in practice seems to be required on later versions of Windows too.

Other problems?

For more help if the build fails, see Troubleshooting building wxWidgets using Microsoft VC

Common Compilation Errors

  • Setup.h not found:
    If when you try to compile Audacity you get errors about "Setup.h" not being found, that could mean:
    • a) You have not compiled wxWidgets in the right version for the version of Audacity you are trying to build (e.g. incorrect Unicode choice - You must select "DLL Unicode Debug" or "DLL Unicode Release" and NOT "DLL Universal Unicode Debug/Release") OR
    • b) Your $(WXWIN) environment variable is wrong. For it to take effect after a change you must restart Visual Studio or better, reboot.
  • unistd.h not found:
    • Add "..\..\lib-src\libsamplerate\Win32" to INCLUDE path (C/C++->General->Additional Include Directories) for the project that fails to build with this error (usually - libid3tag).
  • wx*26ud.lib not found when building in Unicode_Debug configuration:
    • Change wx*26ud to wx*28ud for Audacity project (In Visual Studio: Project > Audacity Properties > expand Configuration Properties > Linker > Input > Additional Dependencies).
    • Make sure you built wxWidgets in Unicode Debug configuration.
    • This applies to all similar errors (with other configurations) - first check that dependencies has the right version, then check that these files exist at all.

Still got problems?
  • Try pasting the error messages into a Google search box. Many of the compiler and linker error messages are fairly cryptic unless you've seen them before, but there are often messages in web-searchable e-mail lists explaining what they mean and what to do.
  • For more help, see the file win/compile.txt in the Audacity source code. If you are still stuck, please ask on the Compiling Audacity section of our Audacity Forum.