Проблема с получением флагов libconfig

Я пытаюсь скомпилировать проект C, который использует libconfig. Я установил libconfig8-dev пакет, и я пытаюсь получить флаги c, необходимые для компиляции проекта. Бег pkg-config --libs libconfig работает как положено, однако pkg-config --cflags libconfig, ничего не возвращает. Также нет libconfig.pc файл внутри /usr/lib/pkgconfig/, Мой make-файл выглядит следующим образом:

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!"

Компиляция результатов в различных ошибках о неопределенных функциях, например, из undefined reference to 'config_init',

1 ответ

Решение

Вы, вероятно, найдете .pc файл в /usr/lib/x86_64-linux-gnu/pkgconfig/

Это не необычно для pkg-config --cflags ничего не возвращать: это просто означает, что никаких дополнительных флагов не требуется (например, все необходимые заголовочные файлы находятся в стандартном пути включения).

В любом случае, CFLAGS относятся к фазе компиляции сборки, а не к фазе связи - именно здесь происходят неопределенные ошибки символов.

Вероятно, ваша проблема связана с тем, что вы связываете библиотеки и объектные файлы в неправильном порядке: см., Например, Почему имеет значение порядок параметра -l в gcc? Так что постарайтесь

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

Кроме того, не имеет смысла указывать путь включения во время фазы соединения; если вам нужно связать библиотеки из текущего каталога, то замените

LFLAGS = -Wall -I. -pthread 

от

LFLAGS = -Wall -L. -pthread 

(хотя TBH я не уверен, что -Wall оказывает влияние во время фазы соединения).

Другие вопросы по тегам