无法导入 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, Update 3
- 目标是 DLL 项目名称为 ConsoleApplication1
- ,因此输出为 ConsoleApplication1.dll。我已将文件名更改为hello_ext.dll但相同的错误。
- 我使用 x64 配置构建,并使用 dumpbin 验证输出 ConsoleApplication1.dll 确实是 64 位
- 我已经将包含控制台应用程序 1.dll 的路径 ......\ConsoleApplication1\x64\Release 添加到 python 命令行中的 sys.path 中。
那么,你能告诉我如何在 python 中导入模块吗?多谢。
我自己解决了这个问题。感谢贾格曼的有用建议。
(1) 只需将输出文件名从控制台应用程序 1.dll 更改为 hello_ext.pyd。您可以通过将 Pages->General->Target 扩展名设置为".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:您不需要像一些评论建议的那样在属性页->Linker->Input->其他依赖项中指定 boost_python-vc140-mt-gd-1_64.lib 或 boost_python-vc140-mt-gd-1_64.lib。
- 我应该包含什么来制作 boost.python 扩展?
- C++ 和 Boost.Python - 如何将变量公开给 python 并在循环中更新它?
- 如何将来自 Boost.Python 的map_indexing_suite与自定义而不是标准对象一起使用?
- Boost Python Numpy - 要初始化的未定义引用
- Boost.Python :C++模板类型匹配的嵌套命名空间
- Boost.Python 列出了所有公开的类和属性
- Boost.Python 在静态库方面失败
- 在cpp中使用boost-python的python代码是否进行动态内存分配
- Boost.Python 和导入 dll,"The specified module could not be found"
- 无法将__str__特殊方法与Boost::Python接口
- 编译时出现Boost.python链接错误
- 使用 Boost/Python 的未定义符号 - 复杂
- Boost.Python 和C++导入到 Python 3 时编译库错误
- 两个并发的 Python 进程可以在 Boost Python 中运行吗?
- 通过 Boost Python 将 Python 函数转换为 C++,用作回调
- 编译在 Python 代码内部调用的 C++ 代码时出错,使用 Boost Python
- Boost.Python.ArgumentError: World.set(World, str) 中的 Python
- 使用 boost python 从 c++ 为 python 中的类成员变量赋值
- Boost Python 不断链接 Python27 库
- 使用 python3 为 msvc 构建 boost python - 链接器错误