【问题标题】:How to detect the library file by header file or name of function? And vise versa?如何通过头文件或函数名称检测库文件?反之亦然?
【发布时间】:2012-04-20 15:04:27
【问题描述】:

我有一个头文件,例如“elf.h”或方法名称,例如“ElfData::addToSection()”。

我想知道对应的库文件——它的名称和它的位置,例如 /usr/lib/libelf.a 或 /usr/lib/libelf.so.0.8.13。 有什么方法可以解决这个问题。最好的方法是什么。

我也想知道哪些标题、函数与指定的库文件匹配。 操作系统 = Ubuntu Linux。

可能是,这些问题很愚蠢:) 但如果你能回复我将不胜感激。

【问题讨论】:

    标签: linux function header


    【解决方案1】:

    对于较新的库,您通常可以使用pkg-config 工具。你给它你想要链接的包的名字,它会给你适当的编译器/链接器选项:

    $ pkg-config --cflags glib-2.0
    -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
    $ pkg-config --libs glib-2.0
    -lglib-2.0
    

    这样你就可以把它放在你的Makefile

    LIBS = `pkg-config --libs glib-2.0` -lm      # link with glib and libm
    CFLAGS = -O2 `pkg-config --cflags glib-2.0`
    

    (它不会为您找到标题,只会找到包含目录。)

    对于不支持pkg-config 的库,没有一种正确的方法可以找出库所属的标头,反之亦然。您通常要么将这些知识手动编码到构建系统中,要么使用类似 GNU autotools 的东西,它允许检查多个库/头文件以获取所需的标识符或符号。

    【讨论】:

    • 感谢您的回复,拉斯曼先生。我根本不熟悉 GNU 自动工具。如果你能用“elf.h”来演示这个例子,那就太好了。
    • @LuckyMan:与elf.h 无关,因为它没有声明任何函数。没有与之对应的库。
    猜你喜欢
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    相关资源
    最近更新 更多