C标识-l标志的库名称?

时间:2017-11-25 02:13:38

标签: c gcc

当包含gcc的库(-l或小写-L)时,我如何知道要放入特定头文件的参数的库名?

一个例子(但我正在寻找更一般的答案):

我的c文件(名为doS​​omething.c)可能包含:

#include <libv4l2.h>
...
...

我的gcc声明如下:

gcc -o doSomething doSomething.c -lv4l2

在这种情况下,我知道我需要包含库v4l2,如果我还不知道是否有找到该名称的通用方法?

任何帮助将不胜感激

感谢

3 个答案:

答案 0 :(得分:0)

POSIX环境(如Linux)中链接器库的名称具有特殊格式。

静态库(基本上是目标文件的存档)的格式为libname.a

动态库的格式为libname.so。可能在末尾附加了一些版本号(例如libname.so.1libname.so.1.3)。

使用-l(小写L)标记进行链接时,您只需指定name

另请详细了解添加要链接的库的-l与添加路径以查找库的-L之间的区别。

答案 1 :(得分:0)

无论谁向你提供图书馆都应该告诉你它的名字。通常,这是模糊的,暗示的,埋藏在文档中,或留给惯例。

首先,您可以使用文件系统中的完整路径将任何库传递给链接器,例如/usr/lib/libfoo.so或~myaccount / mystuff / bar.a。

链接器有一个内置的标准位置列表来查找库,因此您可以不使用路径的目录部分,只需命名文件,例如libfoo.so。您还可以使用-L开关将目录添加到此列表中(对于POSIX和其他系统上的公共链接器)。

如果文件名的格式为lib foo .a或链接器识别的其他扩展名,则可以使用-l foo 缩写。

因此,如果库安装在标准名称的标准位置,您可以将其链接到-l foo ,供应商或其他供应商应该告诉您 foo < / em>是。

如果库是系统上安装但不是系统标准部分的软件包的一部分,您可以询问系统管理员名称是什么,如果它不在标准位置,在哪里安装它。

答案 2 :(得分:0)

在POSIX系统上,库文件被命名为libxxx.a(对于将被集成到您的可执行文件中的静态库)或libxxx.so(对于将在以下链接的动态库;运行时ld.sold-linux.so用于GNU / Linux))。两者都可以选择带有版本后缀,例如libc.so.6。您与软件包管理器(aptyumpacman)一起安装的标准库和其他库位于/lib/usr/lib

链接时,您只需要指定其名称(即xxx)。就像你想链接数学库libm.so一样,用

编译你的程序
gcc needMath.c -o needMath -lm
                           ~~^

在其他平台上,您最好查看库提供程序的手册,以确定要作为编译器的命令行参数提供的实际名称。手册是你的朋友。