2
respostas

INCLUIR A CURL, CJSON, SSL E CRYPTO À libL.a

O PROGRAMA_A USA A libL.a VINCULADA ESTATICAMENTE (VIDE MAKEFILE'S ABAIXO). GOSTARIA DE INCLUIR AS CURL, CJSON, SSL E CRYPTO À libL.a E EXCLUÍ-LAS DO PROGRAMA_A. PODERIAM ME ORIENTAR QUAIS AS MUDANÇAS DEVEM SER FEITAS NOS DOIS MAKEFILE'S? GRATO. MAKEFILE DA libL.a

CC = gcc
CFLAGS = -Wall -Iinclude # Assumindo que os headers estÆo em L/include

SRC_DIR = src
OBJ_DIR = obj
LIB_DIR = .

SRC = $(wildcard $(SRC_DIR)/*.c)
OBJ = $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SRC))
LIBRARY = $(LIB_DIR)/libL.a

all: $(LIBRARY)

$(LIBRARY): $(OBJ)
    ar rcs $@ $^

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

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

.PHONY: all clean

MAKEFILE DO PROGRAMA_A

CC = gcc
CFLAGS += -Wall -Iheader -IL/include  # Inclua o caminho para os headers da biblioteca L
CFLAGS += -I/usr/include/openssl
CFLAGS += -DBUILD_DATE=\"$(shell date +'%Y%m%d%H%M%S')\"
LDFLAGS = -lcurl -lcjson -lssl -lcrypto -L../L -lL  # Adicione a biblioteca L.a

SRC_DIR = source
OBJ_DIR = obj
BIN_DIR = bin

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

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJ) ../L/libL.a  # Adicione a dependˆncia 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!

Para incluir as bibliotecas curl, cjson, ssl e crypto diretamente na libL.a e removê-las do PROGRAMA_A, você precisará fazer algumas alterações nos seus Makefiles.

Alterações no Makefile da libL.a

  1. Adicione as bibliotecas necessárias ao LDFLAGS: Você precisará adicionar as bibliotecas curl, cjson, ssl e crypto ao processo de criação da libL.a. No entanto, como libL.a é uma biblioteca estática, você não precisa de LDFLAGS, mas precisa garantir que os arquivos objeto que dependem dessas bibliotecas sejam corretamente compilados. Para isso, você pode adicionar as flags de inclusão e vinculação diretamente ao comando de compilação dos objetos.
CFLAGS += -I/usr/include/openssl
LDFLAGS = -lcurl -lcjson -lssl -lcrypto

$(LIBRARY): $(OBJ)
    ar rcs $@ $^
  1. Certifique-se de que as dependências estão corretas: Se algum dos arquivos .c na libL.a depende dessas bibliotecas, certifique-se de que os cabeçalhos necessários estão incluídos.

Alterações no Makefile do PROGRAMA_A

  1. Remova as bibliotecas do LDFLAGS: Agora que as bibliotecas estão incluídas na libL.a, você pode remover as referências a essas bibliotecas no Makefile do PROGRAMA_A.
LDFLAGS = -L../L -lL  # Remova -lcurl -lcjson -lssl -lcrypto
  1. Verifique as dependências: Certifique-se de que o PROGRAMA_A não possui dependências diretas que ainda precisem dessas bibliotecas.

Após essas alterações, ao compilar, libL.a deve conter as bibliotecas adicionais, e PROGRAMA_A deve funcionar sem precisar vinculá-las diretamente.

Espero ter ajudado e bons estudos!

LUCAS, COM AS MUDANÇAS NOS DOIS MAKEFILE'S; O PROGRAMA_A NÃO FOI GERADO DEVIDO A UNDEFINED REFERENCES DAS 4 LIBS, DIANTE DISSO,VOLTEI A ADICIONAR AS 4 LIBS NO MAKEFILE DO PROGRAMA_A. A ADIÇAO DAS 4 LIBS NO MAKEFILE DA LIB ESTÁTICA NÃO SURTIU EFEITO:

LDFLAGS = -lcurl -lcjson -lssl -lcrypto

SERÁ QUE PARA QUE AS AS 4 LIBS SEJAM INCORPORADAS NA L.a, É NECESSÁRIO OBTER OS FONTES DAS: CURL + CJSON + SSL + CRYPTO E COMPILÁ-LAS NA MINHA VM UBUNTU?