Проблема с получением cflags 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'.

0
задан 31 July 2017 в 03:34

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 имеет любой эффект во время фазы ссылки).

0
ответ дан 2 November 2019 в 20:52

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

Похожие вопросы: