我正在尝试将使用qtcreator创建的c ++库扩展为带有boost :: python的python。我创建了一个setup.py,如下所示:
from distutils.core import setup
from distutils.extension import Extension
module1 = Extension('FOO',
include_dirs = ['/usr/include/python3.4', '/home/user/cppProjects/FOOLib','/usr/include', '/usr/local/lib/python3.4/dit-packages'],
libraries = ['python3.4', 'boost_python-py34', 'boost_thread', 'boost_system', 'FOOLib'],
library_dirs = ['/usr/lib/x86_64-linux-gnu/', '/usr/lib/python3.4/config-3.4m-x86_64-linux-gnu/','/home/skywalker/cppProjects/build-FOO-Desktop-Debug/'],
sources = ['pythonprovider.cpp'],
extra_compile_args=['-std=c++11'])
setup(name="PackageName",
ext_modules=[module1])
和Bar.h
class Bar
{
public:
Bar(boost::python::list args)
{
...
}
static void SetN(int n)
{
Bar::N = n;
}
static int N;
};
和Bar.cpp
int Bar::N;
pythonprovider.cpp是
BOOST_PYTHON_MODULE(FOO)
{
class_<Bar>("Bar", init<list>());
}
编译库并在c ++应用程序中使用工作正常。 我在终端输入以下代码,python模块的安装工作正常。
sudo python3 setup.py install
包括python中的包,如
from FOO import *
工作正常。但是当我用静态方法
修改pythonprovider.cpp时BOOST_PYTHON_MODULE(FOO)
{
class_<Bar>("Bar", init<list>())
.def("SetN", &Bar::SetN)
.staticmethod("SetN");
}
编译和安装工作正常,但导入模块断言错误
ImportError:libFOO.so.1:无法打开共享对象文件:没有这样的文件或目录
这发生在我之前。当我从cpp文件移动到构造函数体到头文件问题解决了但是在这种情况下它不能解决我的问题。