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

Я пытаюсь скомпилировать проект C, который использует libconfig. Я установил пакет libconfig8-dev, и я пытаюсь извлечь флаговые c, необходимые для компиляции проекта. Запуск pkg-config --libs libconfig работает так, как ожидалось, однако pkg-config --cflags libconfig ничего не возвращает. Кроме того, внутри /usr/lib/pkgconfig/ нет файла libconfig.pc. Мой файл 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 в 13:34

3 ответа

Скорее всего, вы найдете файл .pc в /usr/lib/x86_64-linux-gnu/pkgconfig/

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

В любом случае, 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
ответ дан 22 May 2018 в 19:59

Скорее всего, вы найдете файл .pc в /usr/lib/x86_64-linux-gnu/pkgconfig/

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

В любом случае, 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
ответ дан 18 July 2018 в 09:21

Скорее всего, вы найдете файл .pc в /usr/lib/x86_64-linux-gnu/pkgconfig/

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

В любом случае, 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
ответ дан 24 July 2018 в 19:19

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

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