【问题标题】:Include glib library in Makefile在 Makefile 中包含 glib 库
【发布时间】:2018-06-02 08:33:48
【问题描述】:

我不是 Makefile 专家。 在我的程序中,我使用 glib.h 的哈希表,所以在我的 Makefile 中我写了这个:

exec: bin/test
    bin/test

clean:
    rm -f build/* bin/*

CFLAGS = -g -Wall -Wpedantic -Wno-padded -O $(shell pkg-config --cflags --libs glib-2.0)

INCLUDES = include/*.h

COMMON_DEPS = $(INCLUDES) Makefile

build/%.o: src/%.c $(COMMON_DEPS)
    $(CC) $(CFLAGS) -c $< -o $@

bin/test: /* functions.o*/ $(COMMON_DEPS)
$(CC) -o bin/test /* functions.o*/

但是当我执行 Makefile 时,我会收到以下错误消息的列表:

...
functions.c: undefined reference to "g_str_hash"
functions.c: undefined reference to "g_str_equal"
...

我不明白为什么

【问题讨论】:

  • 你的 Makefile 真的没有意义。您将如何手动编译代码?命令是什么?
  • 您是否尝试在您的 makefile 中使用 /* 和 */ 作为注释分隔符?

标签: c makefile compiler-errors glib


【解决方案1】:

最后我是这样解决的:

exec: bin/test
    bin/test

clean:
    rm -f build/* bin/*

CFLAGS = -g -Wall -Wpedantic -Wno-padded -O $(shell pkg-config --cflags glib-2.0)

LFLAGS = $(shell pkg-config --libs glib-2.0)

INCLUDES = include/*.h

COMMON_DEPS = $(INCLUDES) Makefile

build/%.o: src/%.c $(COMMON_DEPS)
    $(CC) $(CFLAGS) -c $< -o $@

bin/test: /*functions.o */ $(COMMON_DEPS)
    $(CC) -o bin/test /*functions.o */ $(LFLAGS)

【讨论】:

    【解决方案2】:

    问题的症结在于您在编译命令中包含了链接标志,而不是链接命令本身。

    从CFLAGS 中删除--libs glib-2.0 并将其添加到可用于链接行的新变量LFLAGS...

    exec: bin/test
        bin/test
    
    clean:
        rm -f build/* bin/*
    
    CFLAGS = -g -Wall -Wpedantic -Wno-padded -O $(shell pkg-config --cflags glib-2.0)
    LFLAGS = $(shell pkg-config --libs glib-2.0)
    
    INCLUDES = include/*.h
    
    COMMON_DEPS = $(INCLUDES) Makefile
    
    build/%.o: src/%.c $(COMMON_DEPS)
        $(CC) $(CFLAGS) -c $< -o $@
    
    bin/test: /* functions.o*/ $(COMMON_DEPS)
        $(CC) $(LFLAGS) -o bin/test /* functions.o*/
    

    [注意:我没有修改 makefile 的其余部分,但 bin/test 的依赖规范看起来很奇怪。]

    【讨论】:

    • “不起作用”不是一个很有帮助的诊断。执行的链接命令是什么,错误是什么?
    猜你喜欢
    • 2018-02-27
    • 2011-05-27
    • 2019-07-11
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 2020-06-22
    相关资源
    最近更新 更多