链接器标志位于错误的位置

发布于 2024-10-04 04:32:03 字数 614 浏览 6 评论 0原文

我正在尝试使用 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 主要附加在末尾而不是中间?

I'm trying to use Autotools to build my C program that needs to be linked against certain libraries. It only contains one C source file.

This is the Makefile.am associated with it:

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

When I run make, it tries to compile it using this:

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

However this is wrong, as the library link flags must be at the end, or else it will give errors about undefined references. For example if I run this:

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

It compiles fine.

How can I make it so the LDFLAGS primary is appended at the end rather than in the middle?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

哆啦不做梦 2024-10-11 04:32:03

您可以从不滥用库的 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])

You can start by not abusing LDFLAGS for libraries. LDFLAGS is for linker flags. Use foo_LDADD (for executables) or foobar_LIBADD (when producing a library) to list link libraries.

Also, running pkg-config inside Makefile.am is unnecessary and wasteful. Just use:

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

libglfw_CFLAGS,LIBS is populated by this in configure.ac:

PKG_CHECK_MODULES([libglfw], [libglfw])

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文