Visual C++ 调试库命名规范
在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……也许你可以试试用这个,或者看看代码;)