Я пытаюсь собрать OpenCV v2.3.1, используя Intel TBB и IPP. Я использовал CMake для генерации решения Visual Studio 2010. Сборка прошла успешно, и у меня есть opencv_core231d.lib среди выходных данных.
Теперь я пытаюсь связать opencv_core231d.lib с моим проектом. Однако после указания его в Linker -> Дополнительные зависимости я получаю сообщение об ошибке LNK1104: невозможно открыть файл 'tbb_debug.lib'.
Это не ошибка неразрешенных внешних факторов. Линкер хочет от меня конкретный файл .lib! Как это может быть?
Я сделал dumpbin /all
для opencv_core231d.lib, и для нескольких разделов он говорит мне:
Linker Directives
-----------------
...
/DEFAULTLIB:"tbb_debug.lib"
...
Я попытался добавить tbb_debug.lib в опцию компоновщика / NODEFAULTLIB моего проекта, и это решило проблему. Однако я просто хочу, чтобы TBB был связан в opencv_core231d.lib.
Странно то, что я не могу найти причину, по которой tbb_debug.lib добавляется в параметр / DEFAULTLIB opencv_core231d.lib. Я искал все файлы в каталоге решений, упомянув tbb_debug.lib в качестве подстроки, но единственные совпадения были в сгенерированных файлах .obj и .lib, а не в исходных файлах или файлах проекта. Где магия?
Этот вопрос касается не только OpenCV, но и всего процесса работы с .lib-файлами.
Обновление
В TBB была директива #pragma comment(lib, "tbb_debug.lib")
, включающая файл _tbb_windef.h, так что теперь я могу понять, откуда она взялась.
Чего я до сих пор не понимаю, так это почему он не связан статически в opencv_core231d.lib? Я установил для параметра Библиотекаря -> Зависимости библиотеки значение Да. И в моем проекте нет директив #pragma comment(lib, "tbb_debug.lib")
- я проверил вывод препроцессора.
Спасибо.