Como Compilar a Biblioteca Estática libcurl com Visual Studio

Obtendo o Código-Fonte

Baixe o arquivo compactado da libcurl mais recente e extraia-o em um diretório de sua preferência.

Compilando via NMake

Abra o "Prompt de Comando do Desenvolvedor" do Visual Studio e navegue até a subpasta winbuild dentro do diretório extraído da libcurl.

Uma conisderação importante é a configuração da biblioteca de execução (Runtime Library) do compilador. No Visual Studio, as opções /MT e /MD definem se a aplicação usará a versão estática ou dinâmica da CRT (C Runtime). Ao adicionar RTLIBCFG=static no comando NMake, a libcurl será compilada com a opção /MT; caso contrário, será /MD.

nmake /f Makefile.vc mode=static VC=12 RTLIBCFG=static

Após a conclusão, os artefatos de compilação ficarão disponíveis na pasta builds. Os diretórios relevantes são include e lib, localizados dentro de um caminho semelhante a builds/libcurl-vc12-x86-release-static-ipv6-sspi-winssl.

Exemplo de Utilização

No seu projeto, certifique-se de configurar a opção de Runtime Library para /MT em: Propriedades do Projeto → C/C++ → Geração de Código → Biblioteca de Tempo de Execução.

#define CURL_STATICLIB
#include <iostream>
#include <curl.h>
#pragma comment(lib, "libcurl_a.lib")

size_t receber_dados(char* conteudo, size_t tamanho, size_t blocos, void* contexto)
{
    std::cout << "Bytes recebidos: " << (tamanho * blocos) << std::endl;
    std::cout << conteudo << std::endl;

    int* contador = static_cast<int*>(contexto);
    (*contador)++;

    return tamanho * blocos;
}

int main()
{
    curl_global_init(CURL_GLOBAL_DEFAULT);

    CURL* requisicao = curl_easy_init();
    if (!requisicao) {
        return 1;
    }

    int chamadas = 0;

    curl_easy_setopt(requisicao, CURLOPT_URL, "http://example.com");
    curl_easy_setopt(requisicao, CURLOPT_WRITEFUNCTION, receber_dados);
    curl_easy_setopt(requisicao, CURLOPT_WRITEDATA, &chamadas);

    CURLcode resultado = curl_easy_perform(requisicao);
    if (resultado != CURLE_OK) {
        std::cerr << "Erro: " << curl_easy_strerror(resultado) << std::endl;
    }

    curl_easy_cleanup(requisicao);
    curl_global_cleanup();

    return 0;
}

Parâmetros de Configuração do Makefile

nmake /f Makefile.vc mode=<static ou dll> <opções>

Opções disponíveis:
  VC=<6,7,8,9,10,11,12,14>        - Versão do Visual Studio
  WITH_DEVEL=<caminho>              - Caminho para dependências (SSL, zlib, etc.)
  WITH_SSL=<dll ou static>          - Suporte a OpenSSL
  WITH_MBEDTLS=<dll ou static>     - Suporte a mbedTLS
  WITH_CARES=<dll ou static>        - Suporte a c-ares
  WITH_ZLIB=<dll ou static>         - Suporte a zlib
  WITH_SSH2=<dll ou static>         - Suporte a libSSH2
  ENABLE_SSPI=<yes ou no>           - Suporte a SSPI (padrão: yes)
  ENABLE_IPV6=<yes ou no>           - Suporte a IPv6 (padrão: yes)
  ENABLE_IDN=<yes ou no>            - Uso de APIs IDN do Windows (padrão: yes)
  ENABLE_WINSSL=<yes ou no>         - Suporte nativo a SSL do Windows (padrão: yes)
  GEN_PDB=<yes ou no>               - Gerar símbolos de depuração
  DEBUG=<yes ou no>                  - Build de depuração
  MACHINE=<x86 ou x64>              - Arquitetura alvo (padrão: x86)

Compilação Simplificada

nmake /f Makefile.vc mode=static VC=12 RTLIBCFG=static ENABLE_IPV6=no ENABLE_WINSSL=no ENABLE_SSPI=no

Tags: libcurl Visual Studio NMake compilação estática C++

Publicado em 8-11 20:56