Перейти к содержимому
Compvision.ru
fotomer

Связка OpenCV, QT, VS2013 и std::stringstream - ошибка линковки

Recommended Posts

Создаю в QT Creator приложение QT Widgets, открываю его в VS2013 через плагин для студии, подключаю OpenCV 3.0 beta. Все работает, картинки открываются и парсятся. Но стоит написть в коде std::stringstream как вылезает куча ошибок линковки

 

1>opencv_core300.lib(ocl.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in CameraCalibrator.obj
1>opencv_core300.lib(opencv_core_pch.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in CameraCalibrator.obj
1>opencv_core300.lib(alloc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in CameraCalibrator.obj
1>opencv_core300.lib(alloc.obj) : error LNK2005: "void __cdecl cv::fastFree(void *)" (?fastFree@cv@@YAXPAX@Z) already defined in opencv_world300.lib(opencv_world300.dll)
1>opencv_core300.lib(system.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in CameraCalibrator.obj
1>opencv_core300.lib(system.obj) : error LNK2005: "public: virtual __thiscall cv::Exception::~Exception(void)" (??1Exception@cv@@UAE@XZ) already defined in opencv_world300.lib(opencv_world300.dll)
И далее много.

 

Пробовал в настройках менять кодировку, различные варианты RuntimeLibrary, не помогает. Интересно, что std::wstringstream не вызывает ошибки, string, vector и пр. элементы std работают нормально.

Может кто сталкивался с подобной ошибкой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поставь в свойствах проекта (General) опцию Multibyte вместо Unicode.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поставь в свойствах проекта (General) опцию Multibyte вместо Unicode.

Это я первое что сделал, не помогает. Сейчас выяснил, что ошибка линковки возникает, если присутствует QT. В связке VC2013 и OpenCV без QT эта ошибка не возникает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну, дальше гадание на кофейной гуще: исключить сначала opencv_world из сборки.

Вообще, складывается впечатление, что что-то не так с типом используемой в проектах run time library. Но это надо тыкать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вообще, складывается впечатление, что что-то не так с типом используемой в проектах run time library. Но это надо тыкать.

 

В настройках проекта VC++ тоже все возможные варианты Run time library перебрал, не помогает. Загадочно что расширенный std::wstringstream работает нормально. Можно работать с ним, только конвертить всякий раз string в wstring и обратно, хотя это не есть хорошо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А отключение opencv_world что-нибудь дало?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А отключение opencv_world что-нибудь дало?

О, исключение opencv_core300d.lib из линковки помогло, все работает.

 

З.Ы. Сделеал пустой проект в QT, открыл в VS студии, написал одну строчку stringstream. C opencv_world300d.lib все работает, с opencv_core300d.lib сразу ошибка ликовки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А opencv и Qt какие библиотеки линкуются статические или динамические?

возможно стоит поменять эти флаги

https://msdn.microsoft.com/ru-ru/library/2kzt1wy3.aspx

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А opencv и Qt какие библиотеки линкуются статические или динамические?

возможно стоит поменять эти флаги

https://msdn.microsoft.com/ru-ru/library/2kzt1wy3.aspx

OpenCV как я понимаю линкуется динамически с ранним связыванием.

При отсуствии opencv_core300d.lib  и наличии std::stringstream у меня нормально линкуется с флагом /MD.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×