Compiling LIBFFM On OSX 10.9
原文:http://blog.josephmisiti.com/compiling-libffm-on-osx-10.9/
I recently tried to compile LIBFFM (Field-aware Factorization Machines) on my local machine running 10.9 and things did not work out as expected:
fmm.cpp:11:10: fatal error: 'omp.h' file not found
#include <omp.h>
^
1 error generated.
So it turns out the version of GCC that ships with OSX does not support this header
I ended up getting it compiled, and here is how I did it:
First, download a new version of GCC:
wget http://prdownloads.sourceforge.net/hpc/gcc-4.9-bin.tar.gz
Next, upzip and untar it, and put it in /usr/local/bin
gunzip gcc-4.9-bin.tar.gz
sudo tar -xvf gcc-4.9-bin.tar -C /
Now, you need to update the Makefile
that comes with LIBFFM to look like this
CXX = g++
CXXFLAGS = -Wall -O3 -std=c++0x
# uncomment the following flags if you do not want to use OpenMP
DFLAG += -DUSEOMP
CXXFLAGS += -fopenmp
all: ffm-train ffm-predict
ffm-train: ffm-train.cpp ffm.o
$(CXX) $(CXXFLAGS) -o $@ $^
ffm-predict: ffm-predict.cpp ffm.o
$(CXX) $(CXXFLAGS) -o $@ $^
ffm.o: ffm.cpp ffm.h
$(CXX) $(CXXFLAGS) $(DFLAG) -c -o $@ $<
clean:
rm -f ffm-train ffm-predict ffm.o timer.o
Finally, run make
and you are good to go
(vor)JOSEPH-MISITI:libffm-1.0 josephmisiti$ make
g++ -Wall -O3 -std=c++0x -fopenmp -DUSEOMP -c -o ffm.o ffm.cpp
g++ -Wall -O3 -std=c++0x -fopenmp -o ffm-train ffm-train.cpp ffm.o
g++ -Wall -O3 -std=c++0x -fopenmp -o ffm-predict ffm-predict.cpp ffm.o