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

C++ where are the flags for linking libraries documented?

本文关键字:标志 在哪里 记录 链接 C++      更新时间:2023-10-16

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

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

问题是找到我需要的这些标志的唯一方法是在谷歌上无休止地搜索它们。是否有一个"标准"位置可以找到任何库的这些标志?它们是附加到标题的顶部还是其他东西?我希望这只是我错过的明显的东西。

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

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

pkg-config --list-all | less -i

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

pkg-config --libs gl
pkg-config --cflags gl

然后你可以把它放到你的制作文件中:

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)

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

而且,如果您没有安装库的开发版本,则这些都不起作用。

sudo apt-get install libgl1-mesa-dev

PS GLU 有点过时了。

我假设你问的是GCC/G++编译器。

该标志是 -l<libName> ,其中 <libName> 是要链接的库的名称。例如,-lGL针对 GL 库的链接。

某些库需要按特定顺序使用多个标志的原因只是因为它们相互依赖的方式(您的库所依赖的库也可能依赖于其他一些库,依此类推)。在大多数情况下,库的文档应该可以解决问题。