Невозможно выполнить программу при использовании библиотеки boost (C ++) в отладочной версии на WinXP

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

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

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

Die Anwendung konnte nicht richtig initialisiert werden (0xc0150002). Klicken Sie auf "OK", um die Anwendung zu beden.

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

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

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

(edit) Что ж, я еще не решил свою проблему, но благодаря deemok я сделал шаг вперед. Во избежание недоразумений я даю некоторые пояснения ниже:

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

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


person gimpf    schedule 13.01.2009    source источник


Ответы (4)


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

person Reunanen    schedule 13.01.2009
comment
Нет, не готовый. Установщик просто загружает исходный код, а затем начинает наращивать ускорение для выбранных вами компиляторов и конфигурации. Так что точно идентичные. - person gimpf; 14.01.2009
comment
Я проверил, ты меня туда доставил. Должно быть, я вспоминал старые времена, когда я сам строил все бусты. Нет, я сделал то же самое для нужных мне сейчас буст-версий, и это работает. Тем не менее, почему DLL Boost-Pro не работают только на моем ПК? Неважно. - person gimpf; 22.01.2009

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

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

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

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

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

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

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

person Reunanen    schedule 13.01.2009
comment
Спасибо за ваши идеи, это действительно похоже на проблему SxS, но не для среды выполнения отладки (другие проекты, не использующие ускорение, работают ...). Статическая привязка невозможна по причинам, указанным в редактировании. - person gimpf; 13.01.2009

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

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

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

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

person Stefan    schedule 13.01.2009
comment
Спасибо за идеи, но Dependency Walker был первым инструментом, который я попробовал. А из-за функции автоматического связывания и строгих соглашений об именах Boost было бы невозможно загрузить неправильную DLL. - person gimpf; 13.01.2009

person    schedule
comment
Спасибо за подсказку с EventLog, я совсем забыл об этом. Он показывает мне ошибку для boost-DLL, просто не могу понять из нее - пока. - person gimpf; 13.01.2009