Difference between revisions of "HowTo compile with Visual Studio"

From AMule Project FAQ
Jump to: navigation, search
(created)
 
 
(22 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<center>'''English''' | [[HowTo compile with Visual Studio|German]]</center>
 
 
 
== Requirements for compiling [[aMule]] for Windows using Visual Studio ==
 
== Requirements for compiling [[aMule]] for Windows using Visual Studio ==
  
 
You will need the following packages:
 
You will need the following packages:
  
*Microsoft [http://msdn.microsoft.com/en-us/vstudio/default.aspx Visual Studio] 2005 or 2008 (called "VS")
+
*Microsoft [http://msdn.microsoft.com/en-us/vstudio/default.aspx Visual Studio] 2008 or 2010 (called "VS") - either the free Express Edition or the commercial edition
*Windows port of [[wxWidgets]] library (knows as [[wxWidgets|wxMSW]]) -> [http://prdownloads.sourceforge.net/wxwindows/wxMSW-2.8.7.zip Download (2.8.7)]
+
*Windows port of [[wxWidgets]] library (known as wxMSW) -> [http://prdownloads.sourceforge.net/wxwindows/wxMSW-2.8.12.zip Download (2.8.12)]
* [http://www.cryptopp.com/ Crypto++] library -> [http://prdownloads.sourceforge.net/cryptopp/cryptopp552.zip Download(5.5.2)]
+
* [http://www.cryptopp.com/ Crypto++] library -> [http://prdownloads.sourceforge.net/cryptopp/cryptopp561.zip Download (5.6.1)]
*[http://www.zlib.org zlib] compression library -> [http://www.zlib.net/zlib-1.2.3.tar.gz Download (1.2.3)]
+
*[http://www.zlib.org zlib] compression library is already included in wxMSW
*aMule's latest [[aMule CVS|source tarball]] (2.1.3 will not work) -> [http://www.hirnriss.net/?area=cvs Download aMule]
+
*[http://www.amule.org/files/ aMule 2.2.6 source] or latest [[aMule SVN|SVN source tarball]] -> [http://amule.sourceforge.net/tarballs/ Download aMule]
  
Also, 1100MB free space on your hard disk (around 40MB to download the above packages and the rest for temporary compilation files and installations. The amount of space needed will largely depend on the configuration flags you use).
+
Also, 1100MB free space on your hard disk (around 40MB to download the above packages and the rest for temporary compilation files and installations.
  
 
As a reference, the whole compilation process will take around 20 min on a medium-high resourced computer.
 
As a reference, the whole compilation process will take around 20 min on a medium-high resourced computer.
Line 20: Line 18:
 
*Unpack wxMSW to "aMule\wxWidgets" (no intermediate subfolder).
 
*Unpack wxMSW to "aMule\wxWidgets" (no intermediate subfolder).
 
*Unpack cryptopp to "aMule\cryptopp" (no intermediate subfolder).
 
*Unpack cryptopp to "aMule\cryptopp" (no intermediate subfolder).
*Unpack zLib to "aMule\zlib" (no intermediate subfolder).
+
*Unpack aMule to "aMule\trunk" (no intermediate subfolder). This folder can be named as you like, the 2 library folders must have exact the names from above, or the project won't load.
*Unpack aMule to "aMule\trunk" (no intermediate subfolder). This folder can be named as you like, the 3 library folders must have exact the names from above, or the project won't load.
+
  
 
== Preparing the library projects ==
 
== Preparing the library projects ==
  
 +
VS2008:
 
*Open "aMule\wxWidgets\build\msw\wx.dsw" in VS. It asks, if it should convert the project. Answer "Yes to all".
 
*Open "aMule\wxWidgets\build\msw\wx.dsw" in VS. It asks, if it should convert the project. Answer "Yes to all".
*Close VS, saving the changes.
 
*Open "aMule\zlib\projects\visualc6\zlib.dsw" in VS. It asks, if it should convert the project. Answer "Yes to all".
 
 
*Close VS, saving the changes.
 
*Close VS, saving the changes.
  
== Compiling the libraries ==
+
VS2010 can't open the ancient dsw projects anymore. Download [http://amule.googlecode.com/files/wx2.8.12_VS2010_proj.zip project files] and put them in aMule\wxWidgets\build\msw .
  
*Open the aMule solution "aMule\trunk\MSVC Solution\aMule-MSVC.sln" in VS (VS 2008 will again ask to convert it)
+
If you build with wx 2.9 (which is highly experimental!) it comes with projects for VS2008 ("aMule\wxWidgets\build\msw\wx_vc9.sln") which you can use in VS2008 or open in VS2010 for conversion.
*In the toolbar set the Solution Configuration to ''Debug'' or ''Release'' (whatever you prefer) and the Solution Platform to ''Win32''.
+
*In the solution explorer open properties of ''external libraries/cryptlib''.
+
*In ''Configuration Properties/C-C++/Code Generation'' change ''Runtime Library'' to ''Multithreaded Debug DLL (/MDd)'' for the debug build or to ''Multithreaded DLL (/MD)'' for the release build.
+
*Right-click on ''external libraries'' and select ''build''.
+
  
== Compiling aMule ==
+
== Selecting the solution ==
 +
#"aMule-MSVCE-ExtLibs.sln" builds wxWidgets and cryptopp into a single big lib "libext.lib".
 +
#"aMule-MSVCE.sln" builds aMule (including aMule's internal libs) and aMule's tools. That way the (now flat) aMule solution is not cluttered with all the wxWidgets libs, and a ''Clean Solution'' won't clean the wxWidgets build (which usually is not the intention). These solutions can be used both with the express edition and with the commercial VS edition.
 +
#"aMule-MSVC.sln" works only with the commercial edition of VS2008. This solution includes everything - aMule, tools, external libs, organized in folders (which the express edition does not allow). Usage of this solution is ''not recommended'' for newer versions of aMule.
  
If you aren't interested in Unit Tests (or don't know what it's about) remove the ''UnitTests'' tree from the solution.
+
== Compiling the external libraries ==
  
Now hit ''F7'' and lean back.
+
*Open the aMule solution "aMule\trunk\MSVC Solution\aMule-MSVCE-ExtLibs.sln" in VS.
 +
*In the toolbar set the Solution Configuration to ''Debug'' or ''Release'' (whatever you prefer) and the Solution Platform to ''Win32''.
 +
*Debug build:
 +
*In the solution explorer open properties of ''cryptlib''.
 +
*In ''Configuration Properties/C-C++/Code Generation'' change ''Runtime Library'' to ''Multithreaded Debug DLL (/MDd)''.
 +
*Release build:
 +
*In the solution explorer open properties of all projects except ''buildlibext''.
 +
*In ''Configuration Properties/C-C++/Code Generation'' change ''Runtime Library'' to ''Multithreaded (/MT)''.
 +
*Hit ''F7''.
 +
*If everything was fine, load "aMule\trunk\MSVC Solution\aMule-MSVCE.sln" to continue.
 +
 
 +
== Compiling aMule ==
 +
Select ''Build/Build Solution'' or just hit ''F7'' and lean back.
  
 
If you get errors:
 
If you get errors:
Line 53: Line 60:
 
  '''//''' b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
 
  '''//''' b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
  
=== 'GetTickCount64' : redefinition ===
+
=== error accessing something.pdb ===
  
This happens on Vista with VS 2008. To fix it, open "GetTickCount.h" and insert
+
Sometimes VS stumbles over it's own feet. Just delete the offending pdb and try again.
 
+
'''#define GetTickCount64 GetTickCount_64'''
+
uint64 GetTickCount64();
+
  
 
== Running ==
 
== Running ==
  
To run aMule from VS, right-click on ''Monolithic build/aMule'' and ''Set as StartUp project''.
+
To run aMule from VS, right-click on ''aMule'' and ''Set as StartUp project''.
 
Then hit F5.
 
Then hit F5.
 
To run aMule on a machine with no VS installed you have to install the [http://www.microsoft.com/downloads/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&displaylang=en Visual Studio Runtime].
 
  
 
aMule's configuration will be stored in your document folder in "AppData\Roaming\aMule" (under Vista).
 
aMule's configuration will be stored in your document folder in "AppData\Roaming\aMule" (under Vista).
  
== Version ==
+
== Building aMule with GeoIP support ==
Created by Sturedman on 21.05.08 at 23:10<br>
+
 
 +
The [http://www.maxmind.com MaxMind] GeoIP library can detect the country an IP adress comes from. aMule uses this information
 +
to display a little country flag for each source or ed2k server.
 +
Since this is an external library it is disabled by default. This is how to enable it (only available in the SVN version):
 +
 
 +
Download the free [http://www.maxmind.com/download/geoip/api/c/GeoIP-1.4.6.tar.gz GeoIP C library 1.4.6] (older versions don't work!).
 +
From the folder libGeoIP take "GeoIP.h" and "GeoIP.c" and put them into "MSVC Solution\libs\libGeoIP" (replacing the dummy files that may be there).
 +
 
 +
Rebuild aMule. That's it. :-)
 +
 
 +
The free [http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz GeoIP country database] will be downloaded automatically on startup.

Latest revision as of 12:46, 3 April 2011

Requirements for compiling aMule for Windows using Visual Studio

You will need the following packages:

Also, 1100MB free space on your hard disk (around 40MB to download the above packages and the rest for temporary compilation files and installations.

As a reference, the whole compilation process will take around 20 min on a medium-high resourced computer.

Unpacking the sources

  • Create a root folder. You can name it whatever you want. In this example it is called "aMule".
  • Unpack wxMSW to "aMule\wxWidgets" (no intermediate subfolder).
  • Unpack cryptopp to "aMule\cryptopp" (no intermediate subfolder).
  • Unpack aMule to "aMule\trunk" (no intermediate subfolder). This folder can be named as you like, the 2 library folders must have exact the names from above, or the project won't load.

Preparing the library projects

VS2008:

  • Open "aMule\wxWidgets\build\msw\wx.dsw" in VS. It asks, if it should convert the project. Answer "Yes to all".
  • Close VS, saving the changes.

VS2010 can't open the ancient dsw projects anymore. Download project files and put them in aMule\wxWidgets\build\msw .

If you build with wx 2.9 (which is highly experimental!) it comes with projects for VS2008 ("aMule\wxWidgets\build\msw\wx_vc9.sln") which you can use in VS2008 or open in VS2010 for conversion.

Selecting the solution

  1. "aMule-MSVCE-ExtLibs.sln" builds wxWidgets and cryptopp into a single big lib "libext.lib".
  2. "aMule-MSVCE.sln" builds aMule (including aMule's internal libs) and aMule's tools. That way the (now flat) aMule solution is not cluttered with all the wxWidgets libs, and a Clean Solution won't clean the wxWidgets build (which usually is not the intention). These solutions can be used both with the express edition and with the commercial VS edition.
  3. "aMule-MSVC.sln" works only with the commercial edition of VS2008. This solution includes everything - aMule, tools, external libs, organized in folders (which the express edition does not allow). Usage of this solution is not recommended for newer versions of aMule.

Compiling the external libraries

  • Open the aMule solution "aMule\trunk\MSVC Solution\aMule-MSVCE-ExtLibs.sln" in VS.
  • In the toolbar set the Solution Configuration to Debug or Release (whatever you prefer) and the Solution Platform to Win32.
  • Debug build:
  • In the solution explorer open properties of cryptlib.
  • In Configuration Properties/C-C++/Code Generation change Runtime Library to Multithreaded Debug DLL (/MDd).
  • Release build:
  • In the solution explorer open properties of all projects except buildlibext.
  • In Configuration Properties/C-C++/Code Generation change Runtime Library to Multithreaded (/MT).
  • Hit F7.
  • If everything was fine, load "aMule\trunk\MSVC Solution\aMule-MSVCE.sln" to continue.

Compiling aMule

Select Build/Build Solution or just hit F7 and lean back.

If you get errors:

error in Scanner.cpp

change

b->yy_is_interactive = 0;
// b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;

error accessing something.pdb

Sometimes VS stumbles over it's own feet. Just delete the offending pdb and try again.

Running

To run aMule from VS, right-click on aMule and Set as StartUp project. Then hit F5.

aMule's configuration will be stored in your document folder in "AppData\Roaming\aMule" (under Vista).

Building aMule with GeoIP support

The MaxMind GeoIP library can detect the country an IP adress comes from. aMule uses this information to display a little country flag for each source or ed2k server. Since this is an external library it is disabled by default. This is how to enable it (only available in the SVN version):

Download the free GeoIP C library 1.4.6 (older versions don't work!). From the folder libGeoIP take "GeoIP.h" and "GeoIP.c" and put them into "MSVC Solution\libs\libGeoIP" (replacing the dummy files that may be there).

Rebuild aMule. That's it. :-)

The free GeoIP country database will be downloaded automatically on startup.