我一定是犯了某种明显的错误,但经过数小时的战斗,我无法取得进一步的进展:
升级到 Boost 1.54、CMake 2.8.12 和 Python 2.7.5(所有三个都来自稍早的次要版本)后,我的项目的 Python 绑定不再在调试配置中链接(它们在发布中链接正常)。我正在使用 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:使用进程监视器我可以不搜索 python27_d.lib 的C:\Python27\libs\
实际位置:
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
更新#4:相关问题:Visual C++ 调试库命名约定