链接器标志位于错误的位置
我正在尝试使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以从不滥用库的 LDFLAGS 开始。 LDFLAGS 用于链接器标志。使用 foo_LDADD(对于可执行文件)或 foobar_LIBADD(当生成库时)列出链接库。
此外,在 Makefile.am 中运行 pkg-config 是不必要的且浪费的。只需使用:
libglfw_CFLAGS,LIBS
在configure.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:
libglfw_CFLAGS,LIBS
is populated by this inconfigure.ac
:PKG_CHECK_MODULES([libglfw], [libglfw])