Oii, Alberto, tudo certo contigo?
Para garantir que as bibliotecas sejam vinculadas estaticamente ao seu programa, você precisa fazer algumas alterações no seu Makefile. Primeiro, você precisa ter as versões estáticas dessas bibliotecas instaladas no seu sistema. É comum elas terem a extensão .a
e podem ser encontradas nos diretórios de bibliotecas padrão do sistema (podem precisar ser instaladas separadamente).
Você pode alterar o Makefile para vincular estaticamente as bibliotecas especificadas deste modo:
Localize as bibliotecas estáticas (arquivos .a
) no seu sistema. Se elas não estiverem presentes, você pode precisar instalá-las ou compilá-las a partir do código-fonte.
Modifique a variável LDFLAGS
para incluir o caminho completo para cada arquivo de biblioteca estática, ou use a opção -static
para forçar a vinculação estática. No entanto, a opção -static
pode vincular todas as bibliotecas estaticamente, o que pode não ser o que você deseja.
Remova -lcurl
, -lcjson
, -lcrypto
e -lssl
do LDFLAGS
e substitua pelos caminhos completos das bibliotecas estáticas (ou adicione a opção -static
antes dessas opções).
Aqui está um exemplo de como o Makefile pode ficar após as alterações:
CC = gcc
CFLAGS = -Wall -Iheader
LDFLAGS = -static -lcurl -lcjson -lcrypto -lssl
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)/meu_programa
all: $(EXECUTABLE)
$(EXECUTABLE): $(OBJ)
$(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -rf $(OBJ_DIR)/*.o $(EXECUTABLE)
.PHONY: all clean
Se outra dúvida surgir, estamos aqui.
Abraços!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.