So, I am trying to connect python 3.2 and C ++ using boost python and have encountered a lot of problems. I finally got it for compilation using libraries 2.7 and it works, but I can't get it to work with python 3.2.
Here is the C ++ code
#include <iostream> using namespace std; void say_hello(const char* name) { cout << "Hello " << name << "!\n"; } int main(){return 0;} #include <boost/python/module.hpp> #include <boost/python/def.hpp> using namespace boost::python; BOOST_PYTHON_MODULE(hello) { def("say_hello", say_hello); }
If I compile it using libraries 2.7, it works fine, but when I use libraries 3.2, I get tons of undefined links from libboost_python.so
Otherwise, I wrote a little python to make it work:
from distutils.core import setup from distutils.extension import Extension setup(name="PackageName", ext_modules=[ Extension("hello", ["testBoost.cpp"], libraries = ["boost_python"]) ])
and it will create like this using python 3.2 or 2.7 build, but when I open the python 3 interpreter and try to import it, it will again give me the undefined error PyClass_Type symbol from libboost_python.so. Any ideas? Is boost python compatible with python 3.x?
If the information is useful, here is my attempt to compile using 3.2:
$ g++ testBoost.cpp -I/usr/include/python3.2 -I/usr/local/include/boost/python -lboost_python -lpython3.2mu /tmp/ccdmU1Yu.o: In function `PyInit_hello': testBoost.cpp:(.text+0xc2): undefined reference to `boost::python::detail::init_module(PyModuleDef&, void (*)())' /usr/local/lib/libboost_python.so: undefined reference to `PyString_Size' /usr/local/lib/libboost_python.so: undefined reference to `PyFile_FromString' /usr/local/lib/libboost_python.so: undefined reference to `PyString_Type' /usr/local/lib/libboost_python.so: undefined reference to `PyInt_Type' /usr/local/lib/libboost_python.so: undefined reference to `PyString_FromString' /usr/local/lib/libboost_python.so: undefined reference to `PyString_FromStringAndSize' /usr/local/lib/libboost_python.so: undefined reference to `Py_InitModule4_64' /usr/local/lib/libboost_python.so: undefined reference to `PyString_FromFormat' /usr/local/lib/libboost_python.so: undefined reference to `PyNumber_Divide' /usr/local/lib/libboost_python.so: undefined reference to `PyNumber_InPlaceDivide' /usr/local/lib/libboost_python.so: undefined reference to `PyInt_AsLong' /usr/local/lib/libboost_python.so: undefined reference to `PyString_InternFromString' /usr/local/lib/libboost_python.so: undefined reference to `PyClass_Type' /usr/local/lib/libboost_python.so: undefined reference to `PyString_AsString' /usr/local/lib/libboost_python.so: undefined reference to `PyInt_FromLong' /usr/local/lib/libboost_python.so: undefined reference to `PyFile_AsFile' collect2: ld returned 1 exit status
And error from python 3 interpreter
File "<stdin>", line 1, in <module> ImportError: /usr/local/lib/libboost_python.so.1.47.0: undefined symbol: PyClass_Type
Thanks for any help!
Dwight
source share