Download>Compiling>Compiling on UNIX-like platforms

# General instructions

Compiling for UNIX-like platforms (e.g. GNU/Linux, Mac OS X) assumes that the standard GNU toolchain is available. In particular, while compilers other than GCC can be used, the compilation scripts require GNU/make.

To compile the library, it is usually sufficient to change to VLFeat root directory, denoted ``VLFEATROOT in the following, and type ``make:

    $ cd VLFEATROOT
    $ make

The make script attempts to automatically detect the host architecture and configure itself accordingly. If the architecture is not detected correctly, it can be specified manually. For instance

    $ make ARCH=glnx86

compiles for GNU/Linux 32-bit. ``make help can be used to obtain a list of other useful options. You can also use ``make info to obtain a list of the configuration parameters used by the Makefile, which might allow you do debug any potential issue.

## Compiling MATLAB support

In order for MATLAB support to be compiled, the MATLAB ``mex script must be in the current path. If it is not, its location must be passed to ``make as follows. First, determine MATLAB's root directory by running a MATLAB session and issuing the ``matlabroot command. Let ``MATLABROOT denote the returned path (e.g. ``/Applications/MATLAB_R2009b.app/). The ``mex script is usually located in ``MALTABROOT/bin/mex. Then run the compilation with the command

    $ make MEX=MATLABROOT/bin/mex

VLFeat must be compiled for the architecture used by MATLAB (run MATLAB's ``computer command to obtain this information). On Mac OS X it is often necessary to turn on 64-bit support explicitly by setting ``ARCH=maci64 as both the 32 and 64 bit versions are plausible targets on 64-bit machines.

## Compiling Octave support

Octave support is still experimental. Similarly to MATLAB, Octave requires compiling MEX files. This can be turned on by passing to make the path to the ``mkoctfile command:

    $ make MKOCTFILE=/path/to/mkoctfile

# Mac OS X troubleshooting

Since macOS CLang compiler does not support OpenMP, this is disabled by default on this platform. To use it, install Brew llvm:

    $ brew install llvm

Then, use the Brew CLang compiler to compile VLFeat, as follows::

    $ make CC=BREWROOT/opt/llvm/bin/clang DISABLE_OPENMP=no

Here ``BREWROOT is the path to Brew installation.