OpenCV Visual Studio 2010 - ошибка RC6034 (DLL ад?) - PullRequest
2 голосов
/ 25 октября 2010

[Добавьте HTTP: // в начало графических ссылок, чтобы они работали для вас.] [Все шаги здесь были выполнены с версиями Release и Debug.Показанные изображения отображают только информацию, связанную с отладкой.]

OpenCV 2.1.0 не работает должным образом с Visual Studio 2010 на моем компьютере, когда он начинает загружать _Video файлы с помощью библиотеки динамических ссылок opencv_ffmpeg_.Возник ряд проблем, особенно с моими попытками получить библиотеки и тому подобное, чтобы связать их для использования в приложениях.99% ошибок, с которыми я столкнулся, я решил, за исключением одной:

i52.tinypic.com / 2yxhmrq.jpg

Текст ошибки:

R6034<br>An Application has made an attempt to load the C runtime library without using a manifest. This is an unsupported way to load Visual C++ DLLs. You need to modify your application to build with a manifest. For more information, please see the "Visual C++ Libraries a SHared Side-by-Side Assemblies" topic in the production documentation.<br><br> (Press Retry to debug the application)</p> <p>Abort | Retry | Ignore

Ошибка возникает из этого исходного кода:

 #include <cv.h>
 #include <cxcore.h>
 #include <highgui.h>

 int main(int argc, char* argv[]) {
  cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE );
  CvCapture* capture = cvCreateFileCapture( "Missile.avi" );
  IplImage* frame;
  while (1) {
   frame = cvQueryFrame( capture );
   if( !frame ) break;
   cvShowImage( "Example2", frame );
   char c = cvWaitKey(33);
   if( c == 27 ) break;
  }
  cvReleaseCapture( &capture );
  cvDestroyWindow( "Example2" );
 }

Missile.avi находится в каталоге приложения (при использовании полного пути все равно генерируется та же ошибка, поэтому это не File-Not-Обнаружена ошибка).

Вот контрольный список всего, что я до сих пор делал:

  1. Попытка следовать инструкциям, установленным OpenCV Wiki (opencv.willowgarage).com / вики / VisualC% 2B% 2B_VS2010).Использование предварительно собранных установочных бинарных файлов для VS2008 мне не помогло.

  2. После долгих поисков и поисков в Интернете я увидел, что люди добились успеха, скомпилировав библиотеки самостоятельно после выполненияСДЕЛАТЬ операцию из исходного кода, используя CMake.Итак, я скомпилировал OpenCV 2.1.0 с нуля, используя CMake 2.8.2 (графический интерфейс) для генерации решения Visual Studio 2010 OpenCV.Он был создан с указанным параметром Cmake: BUILD_AS_SHARED_LIBS [YES].Решению удалось встроить VS2010 с ошибками 0 в любом из проектов.

  3. Поместить все соответствующие файлы в каталоги VC ++ под новым листом свойств Visual Studio 2010: i53.tinypic.com / 2mxlrpg.jpg i54.tinypic.com/2rcbl9j.jpg

  4. Сохраните необходимые файлы Visual Studio ".pdb", необходимые для отладки.Это была одна из первоначальных ошибок, когда я просто использовал Установленные бинарные файлы из OpenCV Wiki - мне нужно было иметь файлы .PDB, чтобы использовать режим «Отладка».i56.tinypic.com/oh2tco.jpg

5a.Выполнение номера 4 позволило мне без проблем использовать следующий код на основе OpenCV:

    #include <cv.h>
    #include <cxcore.h>
    #include <highgui.h>

    int _tmain(int argc, _TCHAR* argv[])
    {
        IplImage *img = cvLoadImage("funny-pictures-cat-goes-pew.jpg");
        cvNamedWindow("Image:",1);
        cvShowImage("Image:",img);

        cvWaitKey();
        cvDestroyWindow("Image:");
        cvReleaseImage(&img);

        return 0;
    }

5b.Текущая проблема возникла, когда я начал компилировать код, который требовал использования видеофайлов - MOV, AVI, MP4 и т. Д. (См. Блок кода в верхней части вопроса).Из-за связывания исходного кода в свойствах каталогов VC ++, исходный код в cvwrap32.cpp, который использовал функцию LoadLibrary, похоже, вызывал ошибку: i51.tinypic.com/69kgg7.jpg

  1. В сообщении об ошибке указано, что загруженная библиотека не имеет манифеста (если мое чтение ошибки, показанное на рисунке вверху, было правильным).Итак, я позаботился о том, чтобы каждая библиотека, изначально сгенерированная с помощью CMake 2.8.2 (gui) и скомпилированная в VS2010, имела файл ".manifest".Конечно же, каждая библиотека имела (LibName) .embed.manifest и (LibName) manifest.rc.Я даже переместил их в каталог приложения, где находились файлы текущего приложения .PDB, Manifest и .ILK.Ошибка по-прежнему означала, что загружаемая мной библиотека не имела манифеста.

  2. В качестве последней попытки паранойи я проверил каждый проект в решении OpenCV VS2010, чтобы убедиться, что / ДАна для манифеста поколения.Это было.

  3. Выполнен тест зависимостей.exe.Все необходимые библиотеки DLL (все msvcr90.dll и т. Д.).

Это все, что я получил, до того, как все пошло к черту.Кажется, я не могу исправить эту ошибку, потому что opencv_ffmpeg210.dll, который LoadLibrary вызывает из cvwrap32.cpp, по-видимому, не имеет данных манифеста.

У кого-нибудь есть идеи?

КомпьютерСпецификации: Windows 7 Ultimate x86 (32-разрядная версия).Компиляция с Visual Studio 2010 с помощью Visual C ++.

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

После просмотра твоего поста я понял, что не сойду с ума.У меня была почти та же проблема при запуске файлов .avi через трекер заголовков EHCI (проект Google Summer of Code).Я смог нормально отследить живое видео, но запуск кода на файлах фильмов вызвал ошибку R6403.В некоторых случаях я мог обойти ошибку, и код работал (аналогично случаю с «одним кадром»).Я построил свой OpenCV из исходного кода, что привело меня от неспособности запустить hello-world к возможности запустить его и пример кода EHCI.Я продолжал искать и в конце концов нашел файл opencv_ffmpeg210d.dll этого человека: http://code.google.com/p/opencvthesis/source/browse/trunk/Capture_Estimator/Capture_Estimator/opencv_ffmpeg210d.dll?r=14

Я заменил dll, сгенерированную Cmake / VisStudio 2010 (не уверен, не совсем эксперт по кодированию на этом уровне).Вуаля!Теперь EHCI работает с видеофайлами без сообщения об ошибке R6403.

Подумал, что я должен передать решение.Может быть, вы, ребята, можете сначала понять, что было не так.

0 голосов
/ 25 октября 2010

Я предлагаю вам запустить OpenCV-2.1.0 Visual C ++ 2010 в Windows 7 , чтобы убедиться, что он работает.Похоже, вам не нужно создавать двоичные файлы OpenCV самостоятельно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...