2014-12-23 3 views
5

Я пытаюсь создать DLL с использованием сообщества Visual Studio 12, которое зависит от OpenCV.Использование статической библиотеки при создании DLL в visual studio

Я хочу включить OpenCV в качестве .lib-файлов, поэтому мне не нужно распространять его отдельно, но мне нужно, чтобы мой файл был создан как DLL.

Но я не могу настроить Visual Studio для импорта библиотеки в DLL. Если в

My Project -> Свойства -> Свойства конфигурации -> Общие -> Тип конфигурации,

Я выбираю "статическую библиотеку (.lib)" и в:

My Project -> Properties - > Свойства конфигурации -> VC++ Справочники -> Библиотека каталоги,

Я выбираю путь к .lib файлов OpenCV, и в

My Project -> Свойства -> Свойства конфигурации -> Linker -> Добавление зависимостей

Я добавляю ссылку на каждый .lib, он работает.

Но если я изменить тип конфигурации сделать «динамическую библиотеку (DLL)», Visual Studio говорит мне:

opencv_highgui2410d.lib(window.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in VectorsImport.obj 

Кажется, я могу только сделать .lib файлы с .lib файлами. Но это кажется маловероятным. Я просмотрел это, но я только нахожу руководства о том, как создавать файлы .lib или .dll или один из другого. Это должно быть довольно просто, но я не могу понять это. Я привык к Linux, где .o можно легко включить в .so. Это меня озадачивает.

+0

Из-за ошибки opencv.lib предназначен для динамической компоновки, вы должны использовать динамическую ссылку. – Matt

ответ

2

Ошибка указывает на то, что вы пытаетесь связать модуль OpenCV, который был скомпилирован для использования статического C/C++ выполнения с поддержкой отладки с модулем VectorsImport.obj (вероятно, от вашего собственного проекта), который был скомпилированный для использования динамической C/C++ времени выполнения с поддержкой отладки. Четыре варианта библиотеки времени выполнения C не совместимы в Microsoft SDK, поэтому все объектные файлы (либо из вашего проекта, либо из статически связанных библиотек) должны соответствовать этому параметру. В Visual Studio 2010 его можно найти в C/C++ - Compiler -> Codegeneration -> Runtime library.

Обратите внимание, что (как подчеркивается полужирным шрифтом) речь идет не о том, что OpenCV является DLL или .lib, но в случае, если OpenCV связан как отдельная DLL, разрешено использовать другой тип библиотеки времени выполнения C, поэтому несоответствие не имеет значения.

Смежные вопросы