在Visual C++8中,我正在尝试构建最新的OpenCV版本。我使用BUILD_ALL目标,它试图构建所有内容的调试和发布版本。当它试图链接opencv_python应用程序时,我遇到了一个链接错误。错误是链接器找不到预期的Python27_d.lib库,因为我没有那个库,只有发布库。我不明白的是,它是项目配置中所需的发布库(没有_d),也是在生成的命令行中传递的。
如果正在生成调试版本,VS是否在默认情况下添加_d。对于给定的引用库,有没有一种方法可以选择性地关闭它?顺便说一句,该应用程序的发布版本构建良好。
问题实际上在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中,他们有一个用于python.h的包装器boost/python/detail/wrap_python.hpp,它处理所有特定于windows的东西(特别是允许您使用发布的python构建调试dll……也许您可以尝试使用它(或浏览代码;)