【问题标题】:Linker flags in wrong place链接器标志在错误的位置
【发布时间】:2021-03-20 03:39:51
【问题描述】:

我正在尝试使用 Autotools 构建需要链接到某些库的 C 程序。它只包含一个 C 源文件。

这是与之关联的 Makefile.am:

bin_PROGRAMS=game
game_SOURCES=main.c
game_CFLAGS=`pkg-config --cflags libglfw`
game_LDFLAGS=`pkg-config --libs libglfw`

当我运行 make 时,它​​会尝试使用以下代码进行编译:

gcc `pkg-config --cflags libglfw` -g -O2 `pkg-config --libs libglfw`  -o game game-main.o

但是这是错误的,因为库链接标志必须在末尾,否则它将给出未定义引用的错误。例如,如果我运行这个:

gcc `pkg-config --cflags libglfw` -g -O2   -o game game-main.o `pkg-config --libs libglfw`

它编译得很好。

我怎样才能使 LDFLAGS 主节点附加在末尾而不是中间?

【问题讨论】:

    标签: autotools


    【解决方案1】:

    您可以从不为库滥用 LDFLAGS 开始。 LDFLAGS 用于链接器标志。使用 foo_LDADD(用于可执行文件)或 foobar_LIBADD(用于生成库时)列出链接库。

    另外,在 Makefile.am 中运行 pkg-config 是不必要且浪费的。只需使用:

    game_CFLAGS = ${libglfw_CFLAGS} game_LDADD = ${libglfw_LIBS}

    libglfw_CFLAGS,LIBSconfigure.ac 中的这个填充:

    PKG_CHECK_MODULES([libglfw], [libglfw])

    【讨论】:

    • 如何使用常规的 makefile 而不是 autotools 来解决这个问题?据我所知,make 不尊重 LDADD(只是 autotools)。
    • 后续:对于常规的makefile,解决方案是使用LOADLIBES = -lm而不是LDFLAGS = -lm
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多