Соглашение об именах библиотек отладки Visual C++
В Visual C++ 8 я пытаюсь собрать последнюю версию OpenCV. Я использую цель BUILD_ALL, которая пытается собрать как отладочную, так и выпускную версии всего. Я сталкиваюсь с ошибкой ссылки, когда она пытается связать приложение opencv_python. Ошибка заключается в том, что компоновщик не может найти библиотеку Python27_d.lib, чего следовало ожидать, поскольку у меня нет этой библиотеки, только библиотека релизов. Что я не понимаю, так это то, что именно библиотека релизов (без _d) требуется в конфигурации проекта, и это то, что передается в результирующей командной строке.
VS добавляет _d по умолчанию, если версия отладки строится. Есть ли способ выборочно отключить его для данной библиотеки, на которую ссылаются? Кстати, релизная версия приложения работает нормально.
1 ответ
Проблема на самом деле в Python.h (и в частности pyconfig.h), который указывает фактическое имя библиотеки Python
[Я полагаю], вам не нужно использовать библиотеку отладки Python, люди, которые уже работали над этой проблемой.
посмотрите сборки отладки 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 вещи (и, в частности, позволяет создавать отладочную dll с выпуском Python.... возможно, вы можете просто попробовать использовать что вместо этого (или пройти через код;)