【发布时间】:2013-11-12 01:39:49
【问题描述】:
我一定是犯了某种明显的错误,但经过数小时的战斗,我无法取得进一步的进展:
在升级到 Boost 1.54、CMake 2.8.12 和 Python 2.7.5(所有三个略较早的次要版本)后,我的 project 的 Python 绑定不再链接到调试配置中(它们在 Release 中链接良好)。我正在使用 VS 2012 进行构建。更新前一切正常。
我以标准方式构建 Boost:bootstrap.bat,然后是 b2 address-model=64 toolset=msvc-11.0。我的系统有一个 Python 2.7 安装,由 b2 获取:
notice: [python-cfg] Configuring python...
notice: [python-cfg] Registry indicates Python 2.7 installed at "C:\Python27\"
notice: [python-cfg] Checking interpreter command "python"...
notice: [python-cfg] running command 'DIR /-C /A:S "C:\Python27\python.exe" 2>&1'
notice: [python-cfg] running command 'python -c "from sys import *; print('version=%d.%d\nplatform=%s\nprefix=%s\nexec_prefix=%s\nexecutable=%s' % (version_info[0],version_info[1],platform,prefix,exec_prefix,executable))" 2>&1'
notice: [python-cfg] ...requested configuration matched!
notice: [python-cfg] Details of this Python configuration:
notice: [python-cfg] interpreter command: "python"
notice: [python-cfg] include path: "C:\Python27\Include"
notice: [python-cfg] library path: "C:\Python27\libs"
notice: [python-cfg] DLL search path: "C:\Python27"
我的机器上没有任何其他 Python 安装。
当我在我的项目上运行 CMake 时,一切看起来都很好:
Found PythonLibs: optimized;C:/Python27/libs/python27.lib;debug;C:/Python27/libs/python27_d.lib (found version "2.7.5")
Debug中链接器命令行的相关部分如预期:
"C:\franz\dev\boost_1_54_0\stage\lib\libboost_python-vc110-mt-gd-1_54.lib" "C:\Python27\libs\python27_d.lib"
当我最终在 Debug 中构建项目时:
LINK : fatal error LNK1104: cannot open file 'python27.lib'
由于链接器的命令行中没有提到python27.lib,我用十六进制编辑器编辑了libboost_python-vc110-mt-gd-1_54.lib,结果发现它包含对python27.lib(形式为/DEFAULTLIB:"python27.lib")的引用,这是我所期望的引用python27_d.lib 而不是(其中没有)。
我在构建 Boost 时是否做错了什么?这是 Boost 1.54 中 Boost.Python 的一个已知问题吗? 任何帮助将不胜感激。
更新 #1:我再次尝试了 Boost 1.51 和 1.50,但出现了同样的问题,所以这不是 Boost 中的回归。
更新 #2: 我从我的 Python 安装中删除了 Python 库 (python27_d.lib) 的调试版本,从而恢复为普通 Python 安装。然后我重建了 Boost 1.51 和我的项目(使用 CMake 按预期报告单个库文件:Found PythonLibs: C:/Python27/libs/python27.lib (found version "2.7.5"))。问题仍然存在,但错误消息现在提到 python27_d.lib:LINK : fatal error LNK1104: cannot open file 'python27_d.lib'!
更新 #3: 使用 Process Monitor 我可以在它实际所在的 C:\Python27\libs\ 中不搜索 python27_d.lib:
3:35:28.0550683 PM link.exe 10132 CreateFile C:\franz\dev\appleseed\build\appleseed.python\python27_d.lib NAME NOT FOUND Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a
3:35:28.0551846 PM link.exe 10132 CreateFile C:\franz\dev\boost_1_50_0\stage\lib\python27_d.lib NAME NOT FOUND Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a
3:35:28.0552474 PM link.exe 10132 CreateFile C:\franz\dev\boost_1_50_0\stage\lib\Debug\python27_d.lib PATH NOT FOUND Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a
3:35:28.0553595 PM link.exe 10132 CreateFile C:\franz\dev\appleseed\build\appleseed.python\python27_d.lib NAME NOT FOUND Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a
3:35:28.0556105 PM link.exe 10132 CreateFile C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\amd64\python27_d.lib NAME NOT FOUND Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a
3:35:28.0559637 PM link.exe 10132 CreateFile C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\lib\amd64\python27_d.lib NAME NOT FOUND Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a
3:35:28.0560984 PM link.exe 10132 CreateFile C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x64\python27_d.lib NAME NOT FOUND Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a
3:35:28.0561741 PM link.exe 10132 CreateFile C:\franz\dev\appleseed\build\appleseed.python\python27_d.lib NAME NOT FOUND Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: n/a, ShareMode: Read, AllocationSize: n/a
【问题讨论】:
-
这里的
PYTHON_LIBRARIESgithub.com/jupiter-jazz/appleseed/blob/master/src/… 是否包含python库的调试和发布版本的有效路径? -
是的,这一切都很好。我实际上刚刚解决了这个问题,现在写一个答案!感谢您的意见。
标签: c++ visual-c++ boost cmake boost-python