Я пытаюсь скомпилировать проект 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'
.
Вы, вероятно, найдете .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
имеет любой эффект во время фазы ссылки).