Download>Using from C>Xcode

These instructions show how to setup a basic VLFeat project with Apple Xcode. For the sake of simplicty, we create a command line tool written in C. However, these steps apply with minor modifications to other project types and to the C++ lanuage.

First, let us create a new project called vlfeat-client. Open Xcode and select File > New Project > Command Line Utility > Standard Tool and click Choose. Give a name to your project (in our case vlfeat-client), and click Save.

Xcode new project

Now we need to add VLFeat to the C compiler include search path. To do this, select the vlfeat-client target and open the information panel (the blue button, or Command-i). Then select the Build panel, search for the field Header Search Paths, and add VLFeat root path (in our case this is just ~/src/vlfeat).

Xcode info

Next, we add the libvl.dylib library file to the project resources so that Xcode links against it. To do this, drag and drop the libvl.dylib file (in our example ~/src/vlfeat/bin/maci/libvl.dylib) to the left panel and click Add.

Xcode dylib

Next, edit the main.c source file and type the following code:

#include <vl/generic.h>

int main (int argc, const char * argv[]) {
  VL_PRINT ("Hello world!") ;
  return 0;
Xcode edit

If you try to build the project, it should compile without errors (if you are using C++, do not forget to wrap the include statements in a extern "C" {} block). However, if you try to run the program, it will fail, complaining that it cannot find the library image.

Xcode error

The reason is that libvl.dylib is compiled with the library install_name equal to @loader_path/libvl.dylib. This causes the run-time loader to look for the library in the same directory of the executable. There are two ways around this problem: The first is to install the library in a standard location (e.g. /usr/local/lib) and use the otool command to change the library install_name. The other is to simply copy the libvl.dylib file in the executable directory. Here we demonstrate the second technique.

To copy libvl.dylib in the executable directory, we add a Copy Files build phase to the project. Right-click the vlfeat-client target in the project panel and select Add > New Build Phase > New Copy Files Build Phase. Select Destination: Executables. Then drag-and-drop the libvl.dylib item from the panel to the Copy Files build phase.

Xcode copy Xcode copy

Now rebuild the project, and run it. It should run correctly, and if you open the debugger console you should see this:

Xcode ok