Visual C++ 调试库命名规范

2 投票
1 回答
1617 浏览
提问于 2025-04-17 16:11

在Visual C++ 8中,我正在尝试构建最新的OpenCV版本。我使用的是BUILD_ALL这个选项,它会尝试同时构建调试版和发布版的所有内容。当它尝试链接opencv_python应用程序时,我遇到了一个链接错误。这个错误是链接器找不到Python27_d.lib库,这个库是预期的,因为我并没有这个库,只有发布版的库。我不明白的是,项目配置中需要的是没有_d的发布库,而在生成的命令行中也是这个库。

难道VS在构建调试版本时默认会加上_d吗?有没有办法可以选择性地为某个引用的库关闭这个选项?顺便说一下,应用程序的发布版构建得很好。

1 个回答

4

问题其实出在Python.h文件里,特别是pyconfig.h,这个文件里指定了实际的Python库名称。

我觉得你不需要使用Python的调试库,因为Boost团队已经解决了这个问题。

可以查看这个链接了解更多信息:Python调试构建

在pyconfig.h文件中:

/* For an MSVC DLL, we can nominate the .lib files used by extensions */
#ifdef MS_COREDLL
#   ifndef Py_BUILD_CORE /* not building the core - must be an ext */
#       if defined(_MSC_VER)
            /* So MSVC users need not specify the .lib file in
            their Makefile (other compilers are generally
            taken care of by distutils.) */
#           ifdef _DEBUG
#               pragma comment(lib,"python27_d.lib")
#           else
#               pragma comment(lib,"python27.lib")
#           endif /* _DEBUG */
#       endif /* _MSC_VER */
#   endif /* Py_BUILD_CORE */
#endif /* MS_COREDLL */

在Boost里,他们有一个叫boost/python/detail/wrap_python.hpp的包装文件,它是为Python.h准备的,处理了所有Windows特有的内容(特别是允许你用发布版的Python构建调试版的dll……也许你可以试试用这个,或者看看代码;)

撰写回答