繁体   English   中英

Boost.Python创建的dll无法导入(遵循Boost Python的快速入门)

[英]The dll created by Boost.Python cannot be imported (following Boost Python's QuickStart)

我正在尝试按照此处的说明使用Boost.Python。 源代码在该网页中。 我可以编译,链接此简单的示例代码,但无法在python命令行中导入生成的模块。 它总是错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named hello_ext

我不知道这是怎么回事,因为该页面只是说:“就这样。我们完成了。我们现在可以将其构建为共享库。生成的DLL现在对Python可见。” 这是我的建筑环境:

  • Windows 7 64位,我是管理员,以管理员身份运行cmd
  • boost版本为1.64.0(从此处下载的预编译二进制boost_1_64_0-msvc-14.0-64.exe)
  • python版本是2.7.13,64位
  • Visual Studio 2015更新3
  • 目标是DLL
  • 项目名称为ConsoleApplication1,因此输出为ConsoleApplication1.dll。 我已将文件名更改为hello_ext.dll,但存在相同的错误。
  • 我使用x64配置构建,并且已使用dumpbin验证了输出ConsoleApplication1.dll实际上是64位
  • 我在python命令行内部的sys.path中添加了包含ConsoleApplication1.dll的路径...... \\ ConsoleApplication1 \\ x64 \\ Release。

那么,能否请您告诉我如何在python中导入模块? 非常感谢。

我自己解决了这个问题。 感谢jagerman的有用建议。

(1)只需将输出文件名从ConsoleApplication1.dll更改为hello_ext.pyd。 您可以通过将Pages-> General-> Target Extension设置为“ .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,如建议的那样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM