基于这样一个需求,本人正在查看unp的代码(下面是大概的一个文件模型图),并且查看到了tcpcli.c文件,该文件用到了lib文件夹中的一些函数,我只有函数的名称,如何利用函数名在lib下找到该函数所在的源文件呢?需要说明的是,生成tcpcli程序的时候链接的是libunp.a。
----unp----advio---tcpcli.c
|---libunp.a
|---lib
这是经常用到的一种模型,在lib文件夹中定义一些本工程许多文件都依赖的库文件,在lib中生成.o文件之后然后将该lib文件夹下的.o文件在上级文件夹下打包成.a文件,然后别的文件夹的函数要使用lib下的函数的时候只需要链接.a文件即可。
有一种很直接的方法,那么就是在lib文件夹下调用grep命令。
grep Readable_timeo *.c -n
这很好,我们看一看查找的结果:
找到了!
还有一种方法,那就是到libunp.a中去找,利用um命令和grep命令的组合来找。
nm libunp.a | grep Readable_timeo -B5
我们也看到了该函数在radable_timeo.o中,对应的,该函数的实现在radable_timeo.c文件中。
好吧,其实上面的都不是重点,我想说的是,其实linux下命令不会其实没关系,参数太多记不住也没什么关系,有人肯定和你说,你man啊,你可以使用man命令查找用法。
man没错,但是效率太低,因为说明太全了,往往一条命令7,8页,天啊,我只是要用一个很小的功能而已,你要我看那么多,烦不烦啊。很多人因此失去了耐性。
其实往往一个程序都自带了help命令,这里绝对是最简洁的说明,我们瞄一眼即可知道如何使用了。如:
nm --help
[option(s)]表示参数是可选的,[]就是表示可有可无,下面的一些参数的作用说的很明白。
我虽然以前用过很多的grep,但是一段时间不用之后很容易忘记,这时候敲一下:
grep --help
这里很容易看到grep命令的格式grep [OPTION]... PATTERN [FILE]...,OPTION是可选的,PATTERN(模式)是必须要的,文件名不是必须的。
我们可以在下面看到很多的可选的项,只需要轻轻瞄上一眼就可以知道它们的用法了。
比较有用的在这里:
-B表示输出匹配行前面的NUM行,这也是我前面为什么要用-B5的原因,输出含有Readable_timeo行的前面的5行,可以显示出该函数所在的.o文件名。
这个不常用的选项,如果你man grep一下,你确定你能找到?估计你刚看了看就失去了信心,所以,用--help是很有帮助的。