我有一个C++写的DLL,我想导出Python来运行回归和单元测试(用Python维护和运行回归更容易)。 为此我想用Boost.Python导出dll的主API,以便它在Python中可用。 我的程序集如下所示:
BOOST_PYTHON_MODULE
导出定义的瘦dll项目(依赖于我的图书馆.dll)在我有点麻烦我的图书馆.pyd为了链接,但是在深入研究了一些问题之后(例如here),我意识到我必须重新构建boost,同时将b2.exe
指向我的特定Python版本。之后,我可以从python导入并运行我的库(仅在我的机器上)。在
技术数据:我正在用boost1.51、windows7x64和MSVC-10.0上的python3.23构建库(我自己的项目是从VS2010构建的)。我使用的与boost链接的变体是共享库,64地址模型,根据我自己的构建发布。在
问题是,当我试图在另一台机器上导入库(构建在我的机器上)时,python会抱怨:
ImportError: DLL load failed: The specified procedure could not be found.
在import MyLibrary
线上
这就引出了以下问题:
看一下位于http://docs.python.org/3.2/whatsnew/3.2.html的pep384。在
http://www.boost.org/doc/libs/1_52_0/libs/python/doc/news.html表明最近没有任何实际进展,所以我对此表示怀疑Boost.Python支持或至少在定义了Py_LIMITED_API的情况下进行了测试。在
根据我对python2.x兼容性的经验Boost.Python和PyCXX(我还没有使用过3.x行):
我的建议是尝试从源代码构建Boost,并定义Py_LIMITED_API。我不能保证它会成功,但值得一试。在
如果失败了,让你的队友使用与你相同的Python版本,当然还有x64位的Windows(因为.pyd本身就是64位的)。或者更好的方法是设置一个CI机器,在每一个必需的配置中构建python模块,这样客户机就可以选择一个合适的二进制文件。让你的队友构建并使用他们自己的版本我的图书馆.pyd仅供当地使用。在
相关问题 更多 >
编程相关推荐