Как создать блокнот Google в Windows с помощью Qt Creator (gcc/MinGW)?

Дано: проект приложения, написанный для Qt Creator (4.7.4, только Win32, gcc/MinGW).

Необходимо: подключите известную библиотеку Google breakpad для сбора подробных аварийных дампов от клиентов.

Мои текущие выводы таковы:

  • есть проект breakpad-qt, которому около двух лет. Он содержит поддерево восходящих исходных кодов брейкпада, которые будут собраны с помощью Qt Creator, поэтому я попытался создать рабочий пример, создав его.
  • Сама панель прерывания по своей сути зависит от DbgHelp.h из Windows SDK из-за использования формата минидампа Microsoft.
  • DbgHelp.h можно найти в заголовках Windows SDK, но также включает некоторые заголовки из Visual Studio, которые, как сообщается, не могут быть скомпилированы GCC/MinGW (я полагаю, несовместимые языковые расширения компилятором MSVS).
  • google breakpad включает в себя файлы решений MSVS (созданные gyp) и может быть легко создан MSVS (мне удалось с версиями 2008 и 2010 Express), создав несколько .lib для связи с целевым приложением.
  • но файлы .lib, скомпилированные выше, не понимаются MinGW ld, поэтому их нельзя связать с проектом Qt. Известна несовместимость форматов библиотек.
  • однако файлы .lib из MSVS 2008 (а не 2010) понимаются инструментом reimp из инструментов MinGW (последний из доступных), который предназначен для перевода библиотек из формата MSVS в пригодный для использования формат MinGW. В моем случае символы экспортируются вроде бы правильно, и некоторые файлы .obj тоже, но перекомпилированная библиотека (с dlltool MinGW) по-прежнему не линкуется MinGW ld.
  • И вся возня с .lib линковкой перекрывается другой проблемой: в Qt Project нужны валидные заголовки для компиляции клиентского кода, а это именно те заголовки из breakpad, включая DbgHelp.h, см. выше!

В настоящее время открытые альтернативы я вижу:

  • Полностью переключите приложение с Qt/MinGW (Creator) на Qt/MSVS, что может позволить прямое связывание вышестоящей панели прерывания. Я думаю, что это ядро ​​успеха небольших вариантов использования Qt + breakpad.
  • Создайте какой-нибудь гибридный подход, когда приложение создается как обычно с помощью Creator, а затем линкуется с помощью breakpad с помощью компоновщика MSVS. Но опять же, заголовки!
  • Оторвите минимальное замыкание того, что нужно для брейкпада, из заголовков Microsoft, чтобы скомпилировать с помощью чистого Qt Creator.

Любые предложения, существующий опыт?


person spacediver    schedule 28.11.2011    source источник


Ответы (1)


Сожалею, что разочаровал вас, но интеграция QtBreakpad не была разработана и протестирована с MinGW.

person danimo    schedule 01.12.2011
comment
Ну, это совсем не так, потому что есть проект breakpad-qt, и он разработан для Qt Creator. - person spacediver; 02.12.2011
comment
На самом деле я был частью команды, занимавшейся этим :-). Пакеты Qt Creator для Windows создаются с помощью MSVC. Так что, если он работает с MinGW, это простое совпадение. - person danimo; 02.12.2011
comment
Обратите внимание, что вы можете собрать Qt Creator с MinGW, но при этом некоторые функции будут неявно отключены (например, интеграция с панелью задач Windows 7, поскольку в MinGW отсутствуют необходимые заголовки). - person danimo; 02.12.2011