Difference between revisions of "Compile In Linux"

From FreeOrionWiki
Jump to: navigation, search
m (also install pkg-config on debian style systems)
m (Ubuntu)
Line 18: Line 18:
 
To build gigi or FreeOrion you first need to install the following packages using Synaptic (you will need to have the [https://help.ubuntu.com/community/Repositories/Ubuntu#head-5bbef89639d9a7d93fe38f6356dc17847d373096 '''Universe''' repository included]):
 
To build gigi or FreeOrion you first need to install the following packages using Synaptic (you will need to have the [https://help.ubuntu.com/community/Repositories/Ubuntu#head-5bbef89639d9a7d93fe38f6356dc17847d373096 '''Universe''' repository included]):
 
*build-essential
 
*build-essential
 +
*pkg-config
 
*python and python2.5-dev
 
*python and python2.5-dev
 
*scons
 
*scons

Revision as of 15:10, 29 January 2009

Each linux distribution will come with varying components already installed, although some libraries may be older than the version required by FreeOrion. Hopefully the notes below will help to identify what is required for your particular distribution.


Compiler

GCC 4.x is required. See this forum thread.


Kernel

If you compile using kernel 2.6.22 or above, your binary will likely not run on any other system having a lower numbered kernel version. This is due to a feature called "eventfd" which boost uses if a kernel 2.6.22 or above is found.

To avoid this incompatibility, you can specify CPPDEFINES="BOOST_ASIO_DISABLE_EVENTFD" as a parameter to scons to disable usage of eventfd.

This issue should not be a problem at all if you don't share your binaries.

Platform specifics

Ubuntu

To build gigi or FreeOrion you first need to install the following packages using Synaptic (you will need to have the Universe repository included):

  • build-essential
  • pkg-config
  • python and python2.5-dev
  • scons
  • subversion
  • libfreetype6-dev
  • libsdl1.2-dev
  • graphviz-dev
  • libalut-dev
  • libvorbis-dev
  • libboost1.37-dev(only in Ubuntu Jaunty repository)

You can install all of these (including dependencies) from the command line using this:

sudo apt-get install build-essential subversion scons pkg-config
sudo apt-get install python python2.5-dev libfreetype6-dev libsdl1.2-dev libsdl-mixer1.2-dev graphviz-dev libalut-dev libvorbis-dev

Ubuntu (Jaunty repository)

sudo apt-get install libboost1.37-dev

Ogre3D 1.6, which is only recommended and not required to compile GiGi, is not in Ubuntu repository.

Debian unstable

Same as Ubuntu, but Ogre3D 1.6, which is only recommended and not required to compile GiGi, is not in Debian repository.

GiGi

Before attempting to build FreeOrion you will first need to build and install the GiGi library.

The GiGi source should be automatically downloaded from SVN along with the FreeOrion source code. If not, it can be manually downloaded:

svn co https://gigi.svn.sourceforge.net/svnroot/gigi/trunk gigi

Change into the GiGi directory and build the library:

cd freeorion/FreeOrion/GG
scons
sudo scons install
sudo ldconfig

Since improvements and changes will be made to GiGi periodically, you should keep it up to date with:

cd freeorion/FreeOrion/GG
svn update
scons
sudo scons install
sudo ldconfig

FreeOrion

After GiGi is compiled and installed, compile FreeOrion:

cd freeorion/FreeOrion
scons

When improvements have been made to FreeOrion, you should build the new version:

cd freeorion/FreeOrion
svn update
scons


Clean After Dependency Changes

It has been reported that on Gentoo, it may be necessary to clean your old build before rebuilding GiGi or FreeOrion after updates that make changes to dependencies or versions of dependencies used, such as Boost. To do this:

scons --clean


User stories

Compilation Errors

Bogus build errors

You may see errors during the build process like this:

Checking for freetype2 >= 9.0.0... no
Checking for C header file ft2build.h... yes
Checking for FT_Init_FreeType() in C library freetype... yes
Checking for C header file IL/il.h... yes


These failed messages refer to scons not finding an installed package for these components. The subsequent successful checks show that despite there being no pkg-config ".pc" file, the required header and library files were successfully located.

SCons Can't Find Libraries/Dependencies

If SCons is not able to find a library (e.g. Boost, GiGi, etc) that is installed, you need to be certain SCons is looking in the right directories. Your distribution may install the library in an unexpected location, or you may have manually installed the library in a non-standard directory (e.g. /home/user/freeorion/Boost). You will need to configure scons to look in these additional directories. The command:

scons -h

lists the command-line options for SCons, including how to configure dependency directories. The command (add or remove options to match your needs):

scons configure prefix=/usr/local/freeorion with_boost_include=/usr/local/include/boost with_ogre_include=/usr/include/OGRE

will store these options permanently in the file options.cache. Run configure again, or edit options.cache, to change the settings.


boost 1.37

  • If in your distribution is only newer boost library(boost 1.36 is missing), see this forum post
  • Scons can't find boost library. Then you have to tell scon to use mt version of boost with commands:
scons boost_lib_suffix=-mt --config=force

Runtime Errors

Segmentation Fault

If after compiling everything, you run freeorion and get a segmentation fault:

$ ./freeorion
Segmentation fault

Video mode set failed: Couldn't find matching GLX visual

Your video mode is probably set to 16-bit instead of 32-bit, which is what FreeOrion defaults to. You need to either change your X server color depth to 32-bit, or edit the FreeOrion config file in ~/freeorion/config.xml and change color-depth from 32 to 16. You can also try the command line argement:

./freeorion --color-depth 16

IDE for development

  • Text editor and scons to compile
  • Eclipse is open source multiplatform IDE and can be used to compile FreeOrion, but plugins to support scons and subversion have to be installed. See howto Compile With Eclipse.

Debugging

Adding debug symbols to binary

Turn on debugging symbols on GG and FreeOrion with:

scons configure debug=1

and then rebuild GG and FreeOrion.

backtrace

Install debugger gdb and run freeorion with:

gdb ./freeorion

and after it starts gdb type

run

and wait until segfault occurs. Then to print backtrace type

bt