libx264 в Visual Studios 2010 - ошибка памяти в сборке выпуска - PullRequest
0 голосов
/ 08 декабря 2010

Я создаю приложение и использую библиотеку x264 в качестве кодировщика. Я построил библиотеку для моей системы Windows, используя MSys / MingW. Библиотека отлично работает при отладочной сборке (обратите внимание, что как в отладочной, так и в выпускной сборках используются настройки VS2010 по умолчанию). Однако при выпуске возникает ошибка нарушения доступа при первом обращении к библиотеке x264, а именно:

  Unhandled exception at 0x00905a4d in StreamTest.exe:
  0xC0000005: Access violation.

В этой строке выдается ошибка:

x264_param_default_preset((params), "veryfast", "zerolatency");

Пока я выяснял, как скомпилировать библиотеку, я много говорил о выравнивании памяти в Windows / Visual Studios и о том, как она не особенно совместима с выравниванием, ожидаемым x264. Например, при компиляции в MSys мне пришлось включить --enable-memalign-hack. Мне интересно, может ли источник этой ошибки быть связан с проблемой выравнивания памяти, которая проявляется только через некоторые настройки в моей сборке релиза. К сожалению, я почти ничего не знаю о специфике и поэтому пришел сюда.

Может ли кто-нибудь дать мне больше информации о проблемах выравнивания памяти и любых настройках Visual Studio, которые могут вызвать это? Любые другие советы / указатели, чтобы исправить эту проблему, очень приветствуются.

Спасибо.

Редактировать

Из ответа ниже:

  1. Из связанного вопроса SO у меня сложилось впечатление, что он добавил «build with debugger info» в сборку OpenCV? Поскольку я собираю библиотеку x264 через MSys с помощью G ++, я не уверен, что смогу это сделать. Я проверил настройки сборки для моего проекта, и в обоих выпусках и отладках он содержит информацию об отладчике. Не уверен, что я что-то пропустил в этом посте, пожалуйста, дайте мне знать.
  2. Я попробовал верификатор приложения. Кажется, что x264 пытается выполнить код из неисполняемой памяти согласно выводу верификатора приложения:

    VERIFIER STOP 0000000000000650: pid 0x1B18: 
    

    Попытка выполнить код в неисполняемой памяти (первый шанс).

    0000000000905A4D : Address being accessed.
    0000000000905A4D : Code performing invalid access.
    000000000021EA90 : Exception record. Use .exr to display it.
    000000000021E5A0 : Context record. Use .cxr to display it.
    

Что-нибудь можно извлечь из этого вывода?

Еще раз спасибо.

1 Ответ

2 голосов
/ 09 декабря 2010

Обратитесь к аналогичной проблеме здесь , посмотрите, поможет ли это вам тоже.

EDIT

Опубликуйте, что вы также хотите запустить приложение через AppVerifier

EDIT

По моему мнению, выпуск "Build with debugger info" означает включение ключа -g вместе с ключами оптимизации и отключение любого макроса DEBUG. Также, если вы подключили отладчик (используйте Gflags ) для запуска вашего процесса с помощью отладчика (возьмите копию windbg и используйте ее для отладки).

Когда Appverifer останавливает ваш процесс, используйте команду .cxr для получения контекстной информации. Это должно помочь указать на проблему.

...