use*_*911 0 c++ python dll boost python-import
我尝试按照此处的说明使用 Boost.Python。源代码位于该网页中。我可以编译、链接这个简单的示例代码,但无法在 python 命令行中导入生成的模块。总是报错:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named hello_ext
Run Code Online (Sandbox Code Playgroud)
我不知道出了什么问题,因为该页面只是说:“就是这样。我们完成了。我们现在可以将其构建为共享库。生成的 DLL 现在对 Python 可见。” 这是我的构建环境:
那么,你能告诉我如何在 python 中导入模块吗?多谢。
我自己解决了这个问题。感谢 jagerman 的有用建议。
(1) 只需将输出文件名从 ConsoleApplication1.dll 更改为 hello_ext.pyd。您可以通过将“页面”->“常规”->“目标扩展名”设置为“.pyd”来自动执行此重命名。确保文件 hello_ext.pyd 位于 python 的搜索路径中。你可以把它扔到 C:\Python27\DLLs 中,这是 python 的内置搜索路径之一。
(2) 现在你会得到一个不同的导入错误:DLL加载失败:找不到指定的模块。如果您仔细观察 hello_ext.pyd 的文件大小,您可能会注意到一些有线的东西——它只有 19KB。这意味着它不包含导入 python 所需的所有内容,因此 python 必须找到缺失的部分才能正确导入它。是的,您可能会猜到 - 唯一可能缺少的东西是 Boost.Python 库,因此将其路径添加到 PATH 环境变量中 - 对我来说,它是 C:\local\boost_1_64_0\lib64-msvc-14.0。
那么问题就解决了。注意:其他相关问题中的一些答案可能建议构建为静态库,这样,您将收到另一个导入错误:DLL加载失败:%1不是有效的Win32应用程序。所以只需构建为 DLL 即可。PS:您不需要按照一些评论的建议在“属性页”->“链接器”->“输入”->“附加依赖项”中指定 boost_python-vc140-mt-1_64.lib 或 boost_python-vc140-mt-gd-1_64.lib 。