python - 构建 Boost Python 调试

标签 python boost python-3.x boost-python python-embedding

我绝对不是 bjam 专家,如果这真的很愚蠢,请原谅我的无知。

我正在尝试使用 this tutorial 构建 boost::pythondebug 版本.

我在我的文件夹 C:\Development\Python-3.3.0 中构建了 Python 3.3.0。构建有效,.lib.dll.exe 都存在于 PCBuild 文件夹中。我测试了解释器,它工作正常。

我正在使用以下命令行:

bjam --user-config=user-config.jam --with-python python-debugging=on threading=multi variant=debug link=shared stage

我的问题来自 user-config.jam。我尝试按照教程的规范使用以下内容:

using python : 3.3 : C:\\Development\\Python-3.3.0\\PCBuild\\python_d.exe
    : C:\\Development\\Python-3.3.0\\Include C:\\Development\\Python-3.3.0\\PC
    : C:\\Development\\Python-3.3.0\\PCBuild
    : <python-debugging>on ;

但是链接失败了...出于某种原因,它似乎没有发现我希望它使用 3.3,这是输出日志的一部分:

...updating 10 targets...
msvc.link.dll bin.v2\libs\python\build\msvc-11.0\debug\python-debugging-on\threa
ding-multi\boost_python-vc110-mt-gyd-1_52.dll
LINK : fatal error LNK1104: cannot open file 'python26_d.lib'

        call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.b
at" x86 >nul
link /NOLOGO /INCREMENTAL:NO /DLL /DEBUG /MACHINE:X86 /subsystem:console /out:"b
in.v2\libs\python\build\msvc-11.0\debug\python-debugging-on\threading-multi\boos
t_python-vc110-mt-gyd-1_52.dll" /IMPLIB:"bin.v2\libs\python\build\msvc-11.0\debu
g\python-debugging-on\threading-multi\boost_python-vc110-mt-gyd-1_52.lib" /LIBPA
TH:"C:\Development\Python-3.3.0\PCBuild"   @"bin.v2\libs\python\build\msvc-11.0\
debug\python-debugging-on\threading-multi\boost_python-vc110-mt-gyd-1_52.dll.rsp
"

我尝试修改 user-config.jam。起初,我没有转义 \,令人惊讶的是,它检测到我想构建 3.3,但是 /LIBPATH 是错误的(没有反斜杠):

...updating 10 targets...
msvc.link.dll bin.v2\libs\python\build\msvc-11.0\debug\python-debugging-on\threa
ding-multi\boost_python-vc110-mt-gyd-1_52.dll
LINK : fatal error LNK1181: cannot open input file 'python33_d.lib'

        call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.b
at" x86 >nul
link /NOLOGO /INCREMENTAL:NO /DLL /DEBUG /MACHINE:X86 /subsystem:console /out:"b
in.v2\libs\python\build\msvc-11.0\debug\python-debugging-on\threading-multi\boos
t_python-vc110-mt-gyd-1_52.dll" /IMPLIB:"bin.v2\libs\python\build\msvc-11.0\debu
g\python-debugging-on\threading-multi\boost_python-vc110-mt-gyd-1_52.lib" /LIBPA
TH:"C:DevelopmentPython-3.3.0PCBuild"   @"bin.v2\libs\python\build\msvc-11.0\deb
ug\python-debugging-on\threading-multi\boost_python-vc110-mt-gyd-1_52.dll.rsp"

如您所见,它正在寻找所需的 python33_d.lib,但 /LIBPATH 不包含 \。我还尝试用 / 替换,这又回到尝试链接 python26_d.lib

如果它有用,我卸载了任何以前安装的 Python 版本。

如何使我的 jam 文件正确要求版本 3.3 并提供正确的路径?

编辑: 多玩了一会儿,我删除了 ; 之前的“空格”……只是这样做让它寻找正确的版本 3.3,但它试图从相关的 libs 文件夹链接发布版本...最坏的情况我不介意将库从 PCBuild 复制到

using python : 3.3 : C:\\Development\\Python-3.3.0\\PCBuild\\python_d.exe
    : C:\\Development\\Python-3.3.0\\Include C:\\Development\\Python-3.3.0\\PC
    : C:\\Development\\Python-3.3.0\\PCBuild
    : <python-debugging>on;

有趣的是,它最接近我想要实现的目标,但它输出了

C:\Development\boost_1_52_0\boost_1_52_0\user-config.jam:4: syntax error at EOF

jam 解析器似乎很弱......任何提示或技巧都会有所帮助

编辑 2: 为了简化问题,我将 user-config.jam 更改为只包含:

using python : 3.3 ;

并使用以下命令行:

bjam --user-config=user-config.jam --with-python threading=multi variant=release link=shared stage

正如预期的那样,它找不到 .lib

...updating 4 targets...
msvc.link.dll bin.v2\libs\python\build\msvc-11.0\release\threading-multi\boost_p
ython3-vc110-mt-1_52.dll
LINK : fatal error LNK1181: cannot open input file 'python33.lib'

        call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.b
at" x86 >nul
link /NOLOGO /INCREMENTAL:NO /DLL /MACHINE:X86 /subsystem:console /out:"bin.v2\l
ibs\python\build\msvc-11.0\release\threading-multi\boost_python3-vc110-mt-1_52.d
ll" /IMPLIB:"bin.v2\libs\python\build\msvc-11.0\release\threading-multi\boost_py
thon3-vc110-mt-1_52.lib" /LIBPATH:"C:\Development\Python-3.3.0\libs"   @"bin.v2\
libs\python\build\msvc-11.0\release\threading-multi\boost_python3-vc110-mt-1_52.
dll.rsp"

所以我决定将我的 PCBuild 文件夹克隆到 libs 中,这样我构建的所有库都可以访问...但是在这样做之后,没有更改 >.jam 或命令行...它现在正在寻找 Python 2.6?!?

...updating 4 targets...
msvc.link.dll bin.v2\libs\python\build\msvc-11.0\release\threading-multi\boost_p
ython3-vc110-mt-1_52.dll
LINK : fatal error LNK1104: cannot open file 'python26.lib'

        call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.b
at" x86 >nul
link /NOLOGO /INCREMENTAL:NO /DLL /MACHINE:X86 /subsystem:console /out:"bin.v2\l
ibs\python\build\msvc-11.0\release\threading-multi\boost_python3-vc110-mt-1_52.d
ll" /IMPLIB:"bin.v2\libs\python\build\msvc-11.0\release\threading-multi\boost_py
thon3-vc110-mt-1_52.lib" /LIBPATH:"C:\Development\Python-3.3.0\libs"   @"bin.v2\
libs\python\build\msvc-11.0\release\threading-multi\boost_python3-vc110-mt-1_52.
dll.rsp"

我越深入,就越困惑...另外,一个失败了 LNK1104,另一个失败了 LNK1181...

最佳答案

好吧,我最终决定从 bjam 中删除所有可能的参数并从头开始构建。我终于得到了 bjam 使用此命令行构建每个可能的目标:

 bjam --user-config=user-config.jam --with-python

其中 user-config.jam 仅包含以下内容:

using python : 3.3 : C:\\Development\\Python-3.3.0\\PCBuild\\python.exe
    : C:\\Development\\Python-3.3.0\\Include C:\\Development\\Python-3.3.0\\PC
    : C:\\Development\\Python-3.3.0\\PCBuild : ;

现在似乎工作正常。

谢谢

关于python - 构建 Boost Python 调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14009603/

相关文章:

python - 在远程桌面上使用 PyAutoGUI 时出现鼠标点击问题

C++ boost :asio convert socket to stream?

c++ - 在 Ptr_Vector 上 boost FOR_EACH?

python - 如果 cookie 值是字符串,则值错误,但如果是 int,则值错误

python - nargs > 1 的位置参数的元组元变量值

python - 使用 pandasql 时在 VS Code 中使用多个制表符间距设置和注释

python - 使用 pandas.read_csv 跳过多行

python - 连接 Pandas DataFrame 不符合预期

c++ - 返回的 cpu 时钟时间必须在运行中完全相同吗?

python - 在 pandas 中过滤、分组和计数?