The error also occurs, when using boost::python, if the module name is different to the compiled .so file name. For example:
hello.cpp
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
using namespace std;
using namespace boost::python;
int helloWorld(){
cout << "Hello world!" << endl;
return 0;
}
BOOST_PYTHON_MODULE(libhello) {
def("hello_world", helloWorld);
}
compilation command:
g++ -fpic -shared -o libfoo.so -Wl,-soname,"libfoo.so" hello.cpp -I<path/to/python> -L/usr/local/lib -lboost_python-py34
When including in python with import libfoo the following error occurs:
ImportError: dynamic module does not define init function (PyInit_libfoo)
This is because of “libhello” and “libfoo” do not match.