发生此特定链接器错误时,通常是由于应用程序是针对一个版本的Python(例如Python 3.x头文件boost_python
)构建的,而库是针对另一个版本(如2.x)构建的结果。
在中boost/python/module_init.hpp,init_module
针对Python 3.x
构建时,该函数具有以下签名:
PyObject* boost::python::detail::init_module(PyModuleDef&, void(*)());
和针对Python 2.x构建时的以下签名:
PyObject* boost::python::detail::init_module(char const* name, void(*)());
由于可以在可以看到的实施,不仅功能之一将出现在Boost.Python库,。因此,假设已经链接了Boost.Python库,并且链接器仅抱怨无法解析3.xinit_module函数,那么很有可能是针对Python 2.x构建了Boost.Python库。版本,而应用程序代码是针对Python 3.x头文件构建的。您可以通过转储Boost.Python库的符号并检查init_module签名来验证这一点。
要解决此问题,请使用与构建Boost.Python相同的Python版本构建应用程序。在这种情况下,请执行以下任一操作: