【发布时间】:2015-06-02 23:50:10
【问题描述】:
我目前也在尝试使用 scons 构建一个 boost::python 模块。我设法在网上找到了一些代码 sn-ps 并将它们拼接在一起,以便它在 Linux 上正确构建。但是我在 Windows 上遇到了一些重大问题(使用 Visual Studio 2013 编译器)。代码如下:
import distutils.sysconfig, os,sys
def TOOL_BOOST_DISTUTILS(env):
vars = distutils.sysconfig.get_config_vars('CC', 'CXX', 'OPT', 'BASECFLAGS', 'CCSHARED', 'LDSHARED', 'SO')
for i in range(len(vars)):
if vars[i] is None:
vars[i] = ""
(cc, cxx, opt, basecflags, ccshared, ldshared, so_ext) = vars
env.AppendUnique(CPPPATH=[distutils.sysconfig.get_python_inc(), "D:/boost-vs2013/include/boost-1_57"])
if sys.platform == "win32":
print "Configuring for Windows"
env.AppendUnique(CXXFLAGS=["/MD","/EHsc"])
else:
env.AppendUnique(LIBS="boost_python")
env.AppendUnique(CXXFLAGS =["-std=c++11"])
env['SHLIBSUFFIX']=so_ext
env.AppendUnique(LIBPATH = [distutils.sysconfig.get_python_inc()+"/libs", distutils.sysconfig.PREFIX+"/libs","D:/boost-vs2013/lib"])
Default('.')
env=Environment(tools=['default', TOOL_BOOST_DISTUTILS],TARGET_ARCH = 'x86')
env.SharedLibrary(target='RunGA', source=['RunGA.cpp'])
在构建过程中,会创建以下文件:
运行GA.obj
运行GA.pyd
运行GA.exp
运行GA.lib
要导入模块,我需要一个 .dll 文件而不是 .lib,但我不确定如何正确执行此操作。
编辑 04.06.15: 尝试导入 RunGA 模块(通过“导入 RunGA”)时,我收到以下错误消息: 'ImportError: DLL load failed : 找不到指定的模块。'
EDIT2 04.06.15:
我已经设法解决了这个问题。事实证明,项目目录和系统路径中缺少带有 boost python 的 .dll 文件,而 RunGA.pyd 依赖于它。谢谢大家的帮助。
【问题讨论】:
-
pyd 是您要导入的文件。它是一个 dll,只是具有不同的扩展名。在 python 中输入“import RunGA”时会收到什么错误消息?它会在python路径中寻找RunGA.pyd,然后RunGA很可能会在系统路径中寻找其他dll,这是不同的。
-
@KennyOstrom 我编辑了帖子,为您的问题添加了答案。
-
这意味着python找到了它,但是加载dll(pyd)时出现操作系统错误。用depends.exe检查dll依赖。
-
我编辑了我的答案,用更多的话说同样的话。
标签: python c++ boost visual-studio-2013 scons