Дано: проект приложения, написанный для 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
, скомпилированные выше, не понимаются MinGWld
, поэтому их нельзя связать с проектом Qt. Известна несовместимость форматов библиотек. - однако файлы
.lib
из MSVS 2008 (а не 2010) понимаются инструментомreimp
из инструментов MinGW (последний из доступных), который предназначен для перевода библиотек из формата MSVS в пригодный для использования формат MinGW. В моем случае символы экспортируются вроде бы правильно, и некоторые файлы.obj
тоже, но перекомпилированная библиотека (сdlltool
MinGW) по-прежнему не линкуется MinGWld
. - И вся возня с
.lib
линковкой перекрывается другой проблемой: в Qt Project нужны валидные заголовки для компиляции клиентского кода, а это именно те заголовки из breakpad, включаяDbgHelp.h
, см. выше!
В настоящее время открытые альтернативы я вижу:
- Полностью переключите приложение с Qt/MinGW (Creator) на Qt/MSVS, что может позволить прямое связывание вышестоящей панели прерывания. Я думаю, что это ядро успеха небольших вариантов использования Qt + breakpad.
- Создайте какой-нибудь гибридный подход, когда приложение создается как обычно с помощью Creator, а затем линкуется с помощью breakpad с помощью компоновщика MSVS. Но опять же, заголовки!
- Оторвите минимальное замыкание того, что нужно для брейкпада, из заголовков Microsoft, чтобы скомпилировать с помощью чистого Qt Creator.
Любые предложения, существующий опыт?