获取 libconfig 的 cflags 时出现问题

获取 libconfig 的 cflags 时出现问题

我正在尝试编译一个使用 libconfig 的 C 项目。我已经安装了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涉及编译阶段构建,而不是链接阶段- 这是发生未定义符号错误的地方。

您的问题可能是您以错误的顺序链接库和目标文件:例如参见为什么 gcc 中 '-l' 选项的顺序很重要?因此尝试

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

此外,在链接阶段指定包含路径是没有意义的;如果您需要从当前目录链接库,则替换

LFLAGS = -Wall -I. -pthread 

经过

LFLAGS = -Wall -L. -pthread 

(尽管说实话我不确定这-Wall在链接阶段是否有任何影响)。

相关内容