2
respostas

CURL + CJSON DE:DINÂMICAS PARA:ESTÁTICAS

  • O programa (VIDE MAKEFILE ABAIXO), RODA OK NA VM UBUNTU INSTALADA NO CURSO, UTILIZA QUATRO BIBLIOTECAS: CJSON+CRYPTO+CURL+SSL. PRECISO QUE AS QUATRO SEJAM VINCULADAS ESTATICAMENTE (E NÃO DINAMICAMENTE). ALTEREI O MAKEFILE, PASSANDO O DIRETÓRIO ONDE AS libssl.a e libcrypto.a, ESTÃO LOCALIZADAS VIA COMANDO locate; PORÉM AO TENTAR O MESMO COM A CURL, OCORREU UMA SÉRIE DE undefined references, MESMO ESTANDO A libcurl.a NO MESMO DIRETÓRIO QUE AS ANTERIORES. BAIXEI DO SITE OFICIAL DA CURL, OS FONTES NA VM UBUNTU. POR FAVOR, PODEM DIVULGAR UM PASSO A PASSO PARA QUE EU CONSIGA GERAR A libcurl.a + libcjson.a NA VM? GRATO SEGUE ABAIXO O MAKEFILE:
  • `CC = gcc CFLAGS += -Wall -Iheader CFLAGS +=-I/usr/include/openssl # Add the path to OpenSSL headers here CFLAGS +=-I../L2/include CFLAGS += -DBUILD_DATE="$(shell date +'%Y%m%d%H%M%S')" LDFLAGS = /usr/lib/x86_64-linux-gnu/libssl.a LDFLAGS += /usr/lib/x86_64-linux-gnu/libcrypto.a LDFLAGS += -lcurl LDFLAGS += -lcjson LDFLAGS += -L../L2 -lL

SRC_DIR = source OBJ_DIR = obj BIN_DIR = /usr/bin

SRC = $(wildcard $(SRC_DIR)/*.c) OBJ = $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SRC)) EXECUTABLE = $(BIN_DIR)/programa

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJ) ../L2/libL.a # ADICIONE A DEPENDENCIA DA BIBLIOTECA $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(CC) $(CFLAGS) -c $< -o $@

clean: rm -rf $(OBJ_DIR)/*.o $(EXECUTABLE)

.PHONY: all clean `

2 respostas

Olá, Guilherme!

Vamos por partes para tentar resolver isso.

  1. Baixar e Compilar a libcurl Estática:

    Para compilar a libcurl de forma estática, você pode seguir os passos abaixo:

    • Baixe o código-fonte da libcurl do site oficial.

    • Extraia o arquivo e entre no diretório extraído.

    • Execute os seguintes comandos para configurar e compilar a biblioteca de forma estática:

      ./configure --disable-shared --enable-static
      make
      
    • Após a compilação, a libcurl.a deve estar disponível no diretório lib/.libs.

  2. Baixar e Compilar a libcjson Estática:

    Para a libcjson, o processo é semelhante:

    • Baixe o código-fonte da cJSON do repositório oficial.

    • Extraia o arquivo e entre no diretório extraído.

    • Execute os seguintes comandos:

      mkdir build
      cd build
      cmake .. -DENABLE_CJSON_TEST=Off -DBUILD_SHARED_LIBS=Off
      make
      
    • A biblioteca libcjson.a deve ser gerada no diretório build.

  3. Atualizar o Makefile:

    Com as bibliotecas estáticas compiladas, você precisa atualizar o seu Makefile para usá-las:

    • Adicione o caminho das bibliotecas libcurl.a e libcjson.a no LDFLAGS:

      LDFLAGS = /usr/lib/x86_64-linux-gnu/libssl.a
      LDFLAGS += /usr/lib/x86_64-linux-gnu/libcrypto.a
      LDFLAGS += /path/to/curl/lib/.libs/libcurl.a
      LDFLAGS += /path/to/cjson/build/libcjson.a
      
    • Certifique-se de substituir /path/to/curl/lib/.libs/ e /path/to/cjson/build/ pelos caminhos corretos onde as bibliotecas foram geradas.

Esses passos devem ajudar a configurar o seu projeto para usar as bibliotecas de forma estática. Pode ser necessário ajustar outros detalhes dependendo do seu ambiente específico, mas espero que isso forneça um bom ponto de partida.

Bons estudos!

LUCAS, AGRADEÇO A PASSAGEM DE CONHECIMENTO, BAIXEI O CÓDIGO-FONTE DA LIBCURL DO SITE OFICIAL BAIXE O CÓDIGO-FONTE DA LIBCURL DO SITE OFICIAL

EXTRAÍ O ARQUIVO E ENTRE NO DIRETÓRIO EXTRAÍDO EXTRAIA O ARQUIVO E ENTRE NO DIRETÓRIO EXTRAÍDO

O COMANDO PARA CONFIGURAR NÃO FOI ENCONTRADO ./configure --disable-shared --enable-static

CONFIGURE_NO_SUCH_FILE_OR_DIRECTORY