C++记录链接库的标志在哪里
C++ where are the flags for linking libraries documented?
对于我想使用的每个新库,我注意到有一个特定的标志或一组标志,我必须添加到编译中才能让它实际链接库。
例如,对于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 库的链接。
某些库需要按特定顺序使用多个标志的原因只是因为它们相互依赖的方式(您的库所依赖的库也可能依赖于其他一些库,依此类推)。在大多数情况下,库的文档应该可以解决问题。
相关文章:
- C++我需要了解在哪里使用指针和双指针
- 未定义的引用在哪里
- 谷歌测试中的期望值存储在哪里
- 尽管遵循了规则,内存泄漏在哪里
- 静态数据成员模板专用化的实例化点在哪里
- 在哪里放置我的函数?进入我的母语 Gui 还是进入我的演示者?
- 在哪里声明结构运算符重载
- C++ 中的自定义异常:在哪里定义它们?
- 常量参数存储在哪里 (C++)?
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 此递归函数的每次迭代的值存储在哪里?
- 如何告诉本机节点模块所需的dll存储在哪里?
- 在哪里存储跨平台C++应用存储?
- C++泛型类错误,问题出在哪里?
- 在标准中,模板参数的语法在哪里定义,例如,'std::function<int(char)>'?
- 将类作为主要参数的语法在哪里需要?
- 模板参数在 C++ 中存储在哪里?
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- C++记录链接库的标志在哪里
- 在哪里可以找到有关D_GLIBCXX_DEBUG和 DNDEBUG 标志的更多信息