Errors due to vowpal wabbit's dependencies on boost library

large-data, machine-learning, vowpalwabbit

Solution

I happened to get everything working on OS X 10.7 as follows:

Make sure you have a working Boost installation. As indicated on the Getting started page, usually we only need header files, but some Boost libraries must be built separately, including the program_options library which is used to process options from command line or config file. Go into your `boost` folder, and then at your shell prompt:

$ ./bootstrap.sh
$ ./bjam

This will compile and build everything. You should now have a `bin.v2/` directory in your `boost` directory, with all built libraries for your system (static and threaded libs).

$ ls bin.v2/libs/
date_time       iostreams       python          serialization   test
filesystem      math            random          signals         thread
graph           program_options regex           system          wave

More importantly, extra Boost libraries are made available in the `stage/lib/` directory. For me, these are `Mach-O 64-bit dynamically linked shared library x86_64`.

The include path should be `your_install_dir/boost_x_xx_x`, where `boost_x_xx_x` is the basename of your working Boost. (I personally have `boost_1_46_1` in `/usr/local/share/` and I symlinked it to `/usr/local/share/boost` to avoid having to remember version number.) The library path (for linking) should read `your_install_dir/boost_x_xx_x/stage/lib`. However, it might be best to symlink or copy (which is what I did) everything in usual place, i.e. `/usr/local/include/boost` for header files, and `/usr/local/lib` for libraries.

Edit the `Makefile` from the `vowpal_wabbit` directory, and change the include/library paths to reflect your current installation. The `Makefile` should look like this (first 12 lines):

COMPILER = g++
UNAME := $(shell uname)

ifeq ($(UNAME), FreeBSD)
LIBS = -l boost_program_options -l pthread -l z -l compat
BOOST_INCLUDE = /usr/local/include
BOOST_LIBRARY = /usr/local/lib
else
LIBS = -l boost_program_options -l pthread -l z
BOOST_INCLUDE = /usr/local/share/boost            # change path to reflect yours
BOOST_LIBRARY = /usr/local/share/boost/stage/lib  # idem
endif

Then, you are ready to compile `vowpal_wabbit` (`make clean` in case you already compiled it):

$ make
$ ./vw --version
6.1
$ make test

Problem

I'm trying real hard to install vowpal wobbit and it fails when i run the make file, throwing: ``` cd library; make; cd .. g++ -g -o ezexample temp2.cc -L ../vowpalwabbit -l vw -l allreduce -l boost_program_options -l z -l pthread ld: library not found for -lboost_program_options collect2: ld returned 1 exit status make[1]: *** [ezexample] Error 1' ``` I then added the links to the boost library here by specifying -L/usr/local/lib Now I get the following error: ``` g++ -g -o ezexample temp2.cc -L/usr/local/lib ../vowpalwabbit -l vw -l allreduce -l boost_program_options -l z -l pthread ld: library not found for -lvw collect2: ld returned 1 exit status make: *** [ezexample] Error 1 ```

Original source