查找在其中定义特定函数的库

Find the library that a specific function is defined in

本文关键字:函数 在其中 定义 查找      更新时间:2023-10-16

有人给我发了一段C++代码,其中包括一些我不熟悉的头和函数。我想找到哪个头文件定义了一个特定的函数。例如,我有以下标题:

#include <iostream>
#include <ncurses.h>
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <time.h>
#include <unistd.h>
#include <termios.h>
#include <fcntl.h>

我想知道他们中有谁定义了这个函数:

tcgetattr

或者他们中的哪一个定义了这个结构:

termios

有人能帮我吗?

tcgetattrtermios.h的"获取属性"函数。termios结构也来自该标头,因为它共享该名称,所以我认为这是不言而喻的。

例如,请参阅此处的Linux手册页。

如果你想知道哪些标头包含任意函数,我通常(在类似UNIX的操作系统中)只在已知位置使用grep,比如:

grep tcgetattr /usr/include/*.h /usr/include/*/*.h

(或使用grepfind的递归选项到处搜索)。

如果您不知道函数应该在哪里,则可以找到函数声明位置的通用方法:

  • 创建一个仅包含这些行的C++源文件。让我们称之为test.cc

  • 使用带有-E选项的文件进行编译。

    g++ -E -o test.out test.cc
    
  • test.out中查找要跟踪的函数。从那里,您可以追踪它来自哪个.h文件。