Installing and setting up EiffelStudio

EiffelStudio is developed and sold by Eiffel Software. It is released under a dual licensing scheme; a commercial enterprise license for commercial use and a GPL license. The important links are:

Link Description Official home page of Eiffel Software, Santa Barbara, California Official community site for EiffelStudio developers and contributors. Download area for EiffelStudio releases.

The current official version of EiffelStudio is 6.5 ( which can be downloaded from

The current development version is which also can be downloaded from

We provide .deb packages of the current official versions (enterprise & GPL) for both linux-x86 & linux-x86-64 machines. You can download the .deb packages from the bottom of the page. If you want to install manually from a tarball, follow the instructions below.

Installing the tarball on Linux

This guide assumes you are on a Debian or Debian based Linux distribution like Ubuntu. The guide should work for other distributions as well.


You need to have a backend C compiler installed. We use gcc (Debian package gcc-4.3). Installing that package will also install libc6.

Installing and unpacking the tarball

Do as follows with the tarball 'EiffelNN_gpl_XXXXX-linux-x86.tar.bz2' (or 'EiffelNN_gpl_XXXXX-linux-x86-64.tar.bz2' if you're on a 64 bit machine) where NN is the EiffelStudio version and XXXXX is the build (svn) number.

  1. Download the tarball and put it in the following directory:
  1. Unpack the tarball with the following commands:
    user@host:/usr/local$ sudo bunzip2 EiffelNN_gpl_XXXXX-linux-x86-64.tar.bz2
    user@host:/usr/local$ sudo tar xvf EiffelNN_gpl_XXXXX-linux-x86-64.tar
    This will create the directory
  1. Set the ownership (recursively) of the directory with:
    user@host:/usr/local$ sudo chown -R root:root EiffelNN
  1. If you want to precompile the Base and/or Vision libraries run the command:
    user@host:/usr/local/Eiffel60$ sudo ./make_install
    Note that this is usually not neccessary since it is preferable to compile all code when finalizing systems.

Setting up the environment variables

There are a few environment variables that need to be set to make EiffelStudio work. Since you typically want to be able to have more than one version of EiffelStudio installed, these environment variables need to be set to different values depending on what version you want to use. This is accomplished by writing a set of small (bash) scripts for each version of EiffelStudio that sets the environment variables to valid values for that version and then invokes the relevant programs.

This is done by:

  1. Create a personal bin directory (if you don’t already have one):
    user@host:~$ mkdir bin
    Make sure this directory is included in your path by adding the following line to '~/.bashrc':
    export PATH=$PATH:~/bin
  1. Create a script file '/home/user/bin/' for setting up the environment variables for the version of EiffelStudio with the following contents:
    # Description: Set up environment variables for EiffelStudio N.N
    export ISE_EIFFEL=/usr/local/EiffelNN
    export ISE_PLATFORM=linux-x86
    export PATH=$PATH:$ISE_EIFFEL/studio/spec/$ISE_PLATFORM/bin
    export INCLUDE=$INCLUDE:$ISE_EIFFEL/studio/spec/$ISE_PLATFORM/include/
    Make sure the script is executable!
  1. Create a script file '/home/user/bin/' with the following contents:
    # Description: Script for starting EiffelStudio N.N
    source ~/bin/
    /usr/local/EiffelNN/studio/spec/linux-x86/bin/estudio $@
    Make sure the script is executable!
  1. Create a script file '/home/user/bin/' with the following contents:
    # Description: Script for running ec N.N
    source /home/user/bin/
    /usr/local/EiffelNN/studio/spec/linux-x86/bin/ec $@
    Make sure the script is executable!
  1. Create a script file '/home/user/bin/' with the following contents:
    # Description: Script for running finish_freezing N.N
    source /home/user/bin/
    /usr/local/EiffelNN/studio/spec/linux-x86/bin/finish_freezing $@
    Make sure the script is executable!
  1. Add a short cut to '/home/user/bin/' to your desktop environment. Just remember that if your Eiffel system will be writing to stdout and/or stderr you should run the script from the command line since stdout and stderr may be redirected by your desktop application launcher.

There are most probably a few more environment variables you will want to set in order to be able to build your Eiffel systems. Many third party Eiffel libraries make use of environment variables for specifying where they are installed. You may also wish to use environment variables to specify the root directory of your source code for your different Eiffel projects. These environment variables should be set to default values for each login session and thus should be put in your ~/.profile file.

The fact that many third party Eiffel libraries make use of environment variables for specifying where they are installed is a problem when you want to have multiple versions of the same library installed at the same time. Our convention for solving this problem is to have a common root directory for all my Eiffel libraries and then have a single environment variable ELIBS that points to that directory. See External Libraries for more information on how to do this.

Note: since ‘~/.bashrc’ is only executed for non login shells, any environment variables defined in that file will not be set for programs run from the Gnome Applications menu. On the other hand ‘~/.profile’ is executed for all login shells (unless you have created a ‘~/.bash_profile’ or ‘~/.bash_login’ file, in which case they are executed instead).

Setting up links to the EiffelStudio binaries

The two EiffelStudio binaries that handle the compilation of Eiffel systems are:

  • ec. This is the command line Eiffel compiler which generates the ANSI C code.
  • finish_freezing. This is the command line script for compiling the generated ANSI C code.

Set up symbolic links for the following binaries in your personal bin directory:

user@host:~/bin$ sudo ln -s estudio
user@host:~/bin$ sudo ln -s ec
user@host:~/bin$ sudo ln -s finish_freezing

Now invoking any of estudio, ec or finish_freezing should work with the proper environment variables set. If you want to switch to a different version simply update the symbolic links accordingly.

Fixing egc_dynlib.h for shared libraries

If you intend to build shared libraries you will need add a call to 'init_rt ()' in the "egc_dynlib.h" file in order to initialize the Eiffel runtime properly for your shared libraries. This has been reported as a bug to Eiffel Software. For more information on this bug and how to hack the "egc_dynlib.h" file see Incorrect initialization of the Eiffel runtime.