Повреждение памяти в скомпилированных двоичных файлах fftw mingw и 2010? - PullRequest
0 голосов
/ 17 мая 2011

Хотелось бы узнать, не сталкивался ли кто-нибудь с проблемами повреждения памяти при использовании предварительно скомпилированных двоичных файлов mingw fftw, связанных с проектом visual studio 2010.Странно то, что только связывание библиотек fftw (сгенерированное с помощью lib /def:libfftw3-3.def, как объяснено в fftw doc) создает проблемы в моем проекте, даже если ни один из fftw API не вызывается.Что ж, я попробую скомпилировать fftw с нуля в версии 2010, как предполагает автор, но мне любопытно, что простая ссылка на lib может вызвать побочные эффекты.Насколько я могу судить, это не проблема нашего кода на C ++ ...

Некоторые env.Подробности: Win 32 бита, неуправляемый проект C ++ в версии 2010

Спасибо!

Ответы [ 2 ]

1 голос
/ 18 мая 2011

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

Однако MinGW ссылается на среду выполнения msvcrt.dll, котораяраспространяется с системой Windows, в то время как обычная сборка с использованием среды выполнения DLL в VS 2010 будет связываться с MSVCRT100.DLL.Смешивание библиотек времени выполнения - это область, которая может вызвать загадочные проблемы, в частности, если выделения производятся из одной среды выполнения и освобождаются в другой (или даже используются в другой, я полагаю, если задействована среда выполнения отладки).

Ваша лучшая ставкавозможно, стоит попытаться перекомпилировать библиотеку fftw с VS 2010 (я предполагаю, что источник доступен - надеюсь, это не так уж сложно перестроить с помощью MSVC).

Можно убедить VS 2010 использовать среду выполнения msvcrt.dll(Microsoft делает это), но детали не очевидны, и мои заметки в другом месте.

0 голосов
/ 18 мая 2011

fftw делает довольно здоровенную генерацию кода / профилирование / нацеливание на процессор;

Очевидно, они делают это при первом запуске.Таким образом, может быть

  1. ошибка, препятствующая успешному выполнению первоначального запуска профилирования (попробуйте запустить от имени администратора?)
  2. оставшаяся конфигурация из несовместимой установки;Я gues fftw выполнит проверку работоспособности, чтобы убедиться, что найденная конфигурация соответствует текущей запущенной архитектуре, но в случае, если что-то не так в этом процессе, вы могли бы выиграть, найдя и удалив эти данные конфигурации вручную

Извините, я не помню особенности (местоположения)

...