I'm trying to build a simple program using boost.python. 
I have the following code:
//greet.cpp
#include <iostream>
#include <boost/python.hpp>
void greet()
{
    std::cout << "hello world!" << std::endl;
}
BOOST_PYTHON_MODULE(greet)
{
    using namespace boost::python;
    def("greet", greet);
}
and the follwing makefile:
PYTHON_VERSION := 2.7
PYTHON_INC := /usr/include/python$(PYTHON_VERSION)
PYTHON_LIB_LOCATION := /usr/lib/python${PYTHON_VERSION}
PYTHON_LIB_FILE := python${PYTHON_VERSION}
BOOST_INC := ~/boost_1_54_0
BOOST_LIB_LOCATION := /home/elyashiv/boost_1_54_0/stage/lib
BOOST_LIB_FILE := boost_python
CC := gcc
CFLAGS := -c -fPIC
CInc := -I ${BOOST_INC} -I ${PYTHON_INC}
CLinkFlags = -shared -Wl,-soname,$@ -L${BOOST_LIB_LOCATION} -l${BOOST_LIB_FILE} -L${PYTHON_LIB_LOCATION} -l${PYTHON_LIB_FILE}
greet.o: greet.cpp
%.so: %.o
    gcc ${CLinkFlags} -o $@ $^
%.o: %.cpp
    ${CC} ${CFLAGS} ${CInc} $^ 
running make greet.so runs with just a few warnings (redefinition in some boost files). 
when I try to import the module in python I get the following:
Python 2.7.3 (default, Apr 10 2013, 05:46:21) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import greet
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: ./greet.so: undefined symbol: _ZNK5boost6python7objects21py_function_impl_base9max_arityEv
what I have done wrong and how to fix it?
edit
the output of ldd greet.so:
linux-gate.so.1 =>  (0x001ee000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0x0055d000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x0058e000)
/lib/ld-linux.so.2 (0x003a2000)
 
     
     
     
    