Table of Contents
These instructions explain how to compile VLFeat on your own. This can be useful to customize or contribute to VLFeat, but it is otherwise not necessary (use the binary package instead).
Compiling on Unix
Compiling for UNIX-like platforms (e.g. Mac OS X, Linux) uses the
standard GNU toolchain. 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.
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.
Mac OS X 10.6 (Snow Leopard), 64-bit, and MATLAB 2009b.
MATLAB 2009b for Snow Leopard has added 64 bit mex support and a
corresponding extension mexmaci64. VLFeat now supports
compiling for this platform, but the architecture must be specified
manually when compiling, either like:
$ make ARCH=maci64
or
$ make ARCH=maci
Unfortunately, MATLAB 2009b's mex script has a bug that
must be manually fixed in order for this procedure to work
correctly. It is recommend to make backup of the
mex
script before attempting this. Th fix the bug, edit the
MATLABROOT/bin/mex script by cutting the line:
get_arch # Call $MATLAB/bin/util/arch.sh
and pasting it after the processing of options:
...
shift
done
#PASTE get_arch call here
get_arch # Call $MATLAB/bin/util/arch.sh
if [ $v7_compat -eq 1 ] ; then
fc_flags="$fc_flags -DMX_COMPAT_32"
...
Compiling on Windows
For Windows, the library bundles an NMake makefile
(Makefile.mak). In order to use it, you must edit
Makefile.mak to adjust the values of a number of configuration
variables to match your setup. Once you have done that, start the
Visual Studio Command Prompt and type
$ nmake /f Makefile.mak # for the Windows 32 target
$ nmake /f Makefile.mak ARCH=win64 # for the Windows 64 target
For Windows platform, it is also possible to compile just the
MATLAB MEX files from within MATLAB (using the vl_compile
command). This is meant to help less experienced users that may need
to recompile the mex file due to binary incompatibilities with older
MATLAB versions.
Windows troubleshooting
- syntax error: '=' unexpected:
Use
nmake /f Makefile.mak. Without
/f, nmake will default to the wrong makefile.
- 'long' followed by 'long' is illegal:
This error is usually caused by attempting to compile outside of the Visual Studio Command Prompt.