Configurando o Sentry-Native v0.7.2 no Windows
Após sugerir à comunidade do sentry-native a adição da funcionalidade de compressão gzip e contribuir com um PR que foi aceito, a versão 0.7.2 finalmente incluiu esse recurso: https://github.com/getsentry/sentry-native/releases/tag/0.7.2No entanto, a implementação na prática apresenta algumas diferenças em relação às versões anteriores, principalmente na referência à biblioteca zlib. Este artigo documenta essas diferenças e suas soluções.
O sentry-native utiliza CMake-Gui para sua compilação. Na versão 0.7.2, foi adicionada a opção SENTRY_TRANSPORT_COMPRESSION. Quando ativada, a função compressao_com_gzip é usada para compactar as mnesagens de requisição, conforme demonstrado no trecho de código abaixo:
#ifdef SENTRY_TRANSPORT_COMPRESSION
char *corpo_comprimido = NULL;
tamanho_t comprimento_corpo_comprimido = 0;
bool foi_comprimido = compressao_com_gzip(
corpo, comprimento_corpo, &corpo_comprimido, &comprimento_corpo_comprimido);
if (foi_comprimido) {
if (corpo_proprio) {
sentry_free(corpo);
corpo_proprio = false;
}
corpo = corpo_comprimido;
comprimento_corpo = comprimento_corpo_comprimido;
corpo_proprio = true;
}
#endif>
Aqui surge o desafio: o Sentry precisa referenciar a biblioteca zlib, mas não pode utilizar a zlib do crashpad (crashpda_zlib), pois a comunidade mantém esses porjetos independentes, com acoplamento mínimo. Portanto, precisamos usar a biblioteca zlib do sistema.
Excluímos a zlib fornecida pelo GNUWIN32, pois sua versão está desatualizada. Muitos tutoriais nacionais recomendam o download do arquivo MSI do GNUWIN32, mas ao usar APIs mais recentes, problemas com símbolos ausentes podem ocorrer. A abordagem recomendada é compilar manualmente a zlib adequada ao seu projeto. Neste exemplo, usamos a versão zlib-1.2.11.
Código-fonte disponível em: https://github.com/madler/zlib/releases/tag/v1.2.11
Após o download, abra o "x86 Native Tools Command Prompt for Vs 20xx", navegue até o diretório do código-fonte e utilize o nmake para compilar rapidamente:
nmake -f win32/Makefile.msc
Para configurar no CMake-Gui:
- Marque a opção "Advanced"
- Especifique os caminhos dos headers e da biblioteca estática zlib
- Sem esses caminhos, ocorrerá erro de biblioteca não encontrada
Após reconfigurar, a configuração deve estar normalizada.
Resolvendo Problemas de Compilação
Durante a compilação, pode ocorrer o erro "Unresolved external symbol __except_handler4_common" no Visual Studio. Geralmente, isso acontece devido a incompatibilidade no método de geração da Runtime Library.
Solução: todos os projetos devem usar a mesma Runtime Library. Por exemplo, na configuração Release, utilize MT.
Referência: "Unresolved external symbol __except_handler4_common" no Visual Studio 2015