Проблема с получением флагов 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
оказывает влияние во время фазы соединения).