Невозможно выполнить программу при использовании библиотек boost (C ++) в debug-version на WinXP - PullRequest
0 голосов
/ 13 января 2009

Я использую boost для нескольких проектов C ++. Я недавно сделал обновление (с 1.33.1 до 1.36, скоро до 1.37), с тех пор я больше не могу запускать отладочные сборки.

Чтобы быть уверенным, что других проблем с проектом не осталось, я создал минимальный тестовый проект, который включает в себя только boost.thread, и использует его для запуска одного метода. Сборка релиза может быть запущена, сборка отладки не может, хотя Dependency Walker показывает, что все необходимые библиотеки найдены (это также означает, что требуемый MS Debug CRT находится в каталоге SxS).

При запуске я получаю только:

Die Anwendung konnte nicht richtig initialisiert werden (0xc0150002). Klicken Sie auf "OK", умри Anwendung zudenden.

Что означает не что иное, как «не удалось инициализировать приложение». Интернет-исследования в основном привели к проблеме установки MS Office , которая рекомендует выполнить исправление WinXP.

Итак, кроме настройки восстановления (которая, я думаю, не поможет, поскольку я говорю о проблемах с debug-dll), есть какие-нибудь идеи?

Ах, прежде чем я забуду: Абсолютно один и тот же исходный код не приводит к ошибкам на сборочной машине (то есть, DLL могут быть зарегистрированы, значит выполнены). Так что это, очевидно, проблема с установкой, но поскольку библиотеки DLL есть , и обходчик зависимостей находит их, что еще я забыл?

( edit ) Ну, я еще не решил свою проблему, но благодаря deemok я на шаг вперед. Для уменьшения недопонимания приведу несколько пояснений ниже:

  • Программа не запускается на разработчику -машина
  • Я работаю с установленным VS2005 (это проект VC ++ 8)
  • Я использовал boost-setup из BoostPro , скомпилировал все возможные версии сборки и дважды проверил их наличие (в противном случае я уже получал ошибки компоновщика во время сборки).
  • и я дважды проверил любой угол конфигурации include / lib / bin, который могу себе представить - поскольку boost использует автоматическое связывание на окнах при специальном соглашении об именах, сборка или запуск не удастся выполнить с гораздо более понятное сообщение об ошибке.
  • Я не могу использовать статическое связывание , так как boost.thread требует динамического связывания для проектов DLL (возможно, я могу возиться здесь, но, похоже, эта проблема возникает только на моей машине Я не хочу связываться с этим, так как я уверен, что у буст-парней была причина поставить эту проверку в первую очередь)
  • Как я уже писал, я проверил с Dependency Walker, и он говорит, что все в порядке.

В настоящее время кажется, что это ошибка в boost-dll (возможно, неверный Manifest), проверим это.

Ответы [ 4 ]

3 голосов
/ 13 января 2009

Это проблема Side-by-Side (SxS) - простого копирования DLL больше не достаточно.

Относительно вашей конкретной проблемы, связанной со сборкой Debug, см .: Запуск сборок отладки vc2008 на машинах не-dev

Краткий ответ:

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

Итак, вам нужно установить Visual Studio там.

Однако, если вы все еще хотите попробовать, не выбирая этот путь, вы можете прочитать ответ puetzk в полном объеме.

Или вы можете попытаться связать все статически .

1 голос
/ 14 января 2009

То есть вы используете готовые библиотеки от BoostPro? Если это так, ваша среда может как-то немного отличаться от той, в которую они были встроены (пакет функций TR1 или нет и т. Д.). Возможно, лучше всего попробовать building Boost себя в вашей конкретной среде.

1 голос
/ 13 января 2009

Может оказаться, что это не имеет никакого отношения к SxS. Я предлагаю проверить журнал событий на наличие сообщений об ошибках SxS и использовать средство обхода зависимостей для проверки наиболее вероятной проблемы с зависимостями DLL, либо одна из библиотек DLL возвращает FALSE из своего DllMain (по любой причине).

Также, включение оснастки загрузчика:

gflags -i yourapp.exe + sls

может пролить дополнительный свет при запуске в режиме отладчика (или, если уж на то пошло, зависимости).

Примечание: gflags является частью средств отладки Windows .

0 голосов
/ 13 января 2009

Получите себе ходок зависимости . Откройте приложение exe в нем. Он покажет вам все библиотеки, которые нужны вашему приложению, но не могут загрузить / получить к нему доступ.

Если этого недостаточно, вы также можете профилировать свое приложение с помощью обходчика зависимостей, который даст вам много информации, чтобы выяснить, в чем проблема.

[править] так как у вас есть проблемы только с отладочной сборкой: убедитесь, что при обновлении boost вы также перестроили не только двоичные файлы выпуска, но и отладочные двоичные файлы boost. И, конечно же, убедитесь, что отладочная сборка была построена с той же версией VisualStudio, что вы используете сейчас.

И убедитесь, что пути включения (инструменты-> опции-> проекты и решения-> каталоги VC ++) правильные: пути к последней улучшенной версии должны быть там, а не к более старой версии.

...