Problema ao obter os cflags do libconfig

0

Estou tentando compilar um projeto C que usa o libconfig. Eu instalei o pacote libconfig8-dev e estou tentando recuperar os sinalizadores c necessários para compilar o projeto. A execução de pkg-config --libs libconfig funciona conforme o esperado, mas pkg-config --cflags libconfig não retorna nada. Além disso, não há nenhum arquivo libconfig.pc dentro de /usr/lib/pkgconfig/ . Meu arquivo make é o seguinte:

TARGET = uartIO

CFLAGS = -Wall -I. -pthread 'pkg-config --cflags libconfig'

LFLAGS = -Wall -I. -pthread 
LDLIBS = 'pkg-config --libs libconfig'

SRCDIR   = src
OBJDIR   = obj
BINDIR   = bin

SOURCES  := $(wildcard $(SRCDIR)/*.c)
INCLUDES := $(wildcard $(SRCDIR)/*.h)
OBJECTS  := $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o)
rm       = rm -f

debug: CFLAGS += -g
debug: $(BINDIR)/$(TARGET)

$(BINDIR)/$(TARGET): $(OBJECTS)
    $(CC) $(LFLAGS) $(LDLIBS) $(OBJECTS) -o $@
    @echo "Linking complete!" 

$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c
    $(CC) $(CFLAGS) -c $< -o $@
    @echo "Compiled "$<" successfully!"

.PHONY: clean
clean:
    @$(rm) $(OBJECTS)
    @echo "Cleanup complete!"

.PHONY: remove
remove: clean
    @$(rm) $(BINDIR)/$(TARGET)
    @echo "Removal complete!"

A compilação resulta em vários erros sobre funções indefinidas de, por exemplo, undefined reference to 'config_init' .

    
por PoVa 31.07.2017 / 10:36

1 resposta

0

Você provavelmente encontrará o arquivo .pc em /usr/lib/x86_64-linux-gnu/pkgconfig/

Não é incomum que pkg-config --cflags não retorne nada: significa apenas que nenhum sinalizador adicional é necessário (por exemplo, todos os arquivos de cabeçalho necessários estão no caminho de inclusão padrão).

Em qualquer caso, CFLAGS refere-se à fase de compilação de uma compilação, não à fase de enlace - onde ocorrem erros de símbolos indefinidos.

É provável que você esteja vinculando as bibliotecas e os arquivos de objetos na ordem errada: veja, por exemplo, Por que a ordem da opção '-l' no gcc é importante? Então tente

$(BINDIR)/$(TARGET): $(OBJECTS)
    $(CC) -o $@ $(OBJECTS) $(LFLAGS) $(LDLIBS)
    @echo "Linking complete!" 

Além disso, não faz sentido especificar um caminho de inclusão durante a fase de link; Se você precisar vincular bibliotecas a partir do diretório atual, substitua

LFLAGS = -Wall -I. -pthread 

por

LFLAGS = -Wall -L. -pthread 

(embora o TBH não tenha certeza de que -Wall tenha algum efeito durante a fase de link).

    
por steeldriver 31.07.2017 / 12:56