C++ 哪里记录了链接库的标志?

new*_*ekt 1 c++ opengl flags gcc

对于我想使用的每个新库,我注意到都有一个特定的标志或一组标志,我必须添加到编译中才能使其实际链接库。

例如,对于 GL GLEW 和 GLUT,我使用“ -lglut -lGLU -lGL”。

问题是找到我需要的这些标志的唯一方法是在谷歌上无休止地搜索它们。是否有一个“标准”位置可以为任何图书馆找到这些标志?它们是否附加到标题的顶部或其他位置?我希望这只是我遗漏的一些明显的东西。

Die*_*Epp 5

通常,您会形成一种在您开发的平台上发现这些东西的直觉。确实很糟糕。

例如,在我的 Debian 开发系统上,我会首先检查pkg-config我想要的库。

pkg-config --list-all | less -i
Run Code Online (Sandbox Code Playgroud)

看起来有一个名为 的包gl。因此,您可以使用以下方法获取链接器标志pkg-config

pkg-config --libs gl
pkg-config --cflags gl
Run Code Online (Sandbox Code Playgroud)

然后你可以将其放入你的 Makefile 中:

gl_cflags := $(shell pkg-config --cflags gl)
gl_libs := $(shell pkg-config --libs gl)

override CFLAGS += $(gl_cflags)
override LIBS += $(gl_libs)

my_app: my_app.o
        $(CC) $(LDFLAGS) -o $@ $^ (LIBS)
Run Code Online (Sandbox Code Playgroud)

这并不适用于所有库,仅适用于那些已.pc安装文件的库。例如,它不适用于 LibJPEG。在这些情况下,您要么记住标志 ( -ljpeg),要么使用 Autoconf / CMake / 等配置脚本在配置时发现标志。

而且,如果您没有安装库的开发版本,那么这一切都不起作用。

sudo apt-get install libgl1-mesa-dev
Run Code Online (Sandbox Code Playgroud)

PS GLU 有点过时了。