注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

艾伯特的鸟屋

 
 
 

日志

 
 

(转载)calltree 在ubuntu上的编译  

2015-03-01 10:41:03|  分类: applications |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在ubuntu14.10 x86_64测试,没问题,故转载

转载于http://blog.csdn.net/elitemouse/article/details/41680113

参考

http://blog.csdn.net/cqbamboo/article/details/6736627

http://blog.csdn.net/younggift/article/details/9238383

64bit  ubuntu12.04 编译通过

无法上传附件, 附已编译好的文件+源码包  地址: http://download.csdn.net/detail/elitemouse/8217185


1  解压

tar -xvf calltree-2.3.tar.bz2


2 编译 直接执行make  报错如下 :

2.1 

RULES/rules1.top:234: incs/Dcc.x86_64-linux: No such file or directory
RULES/rules.top:39: RULES/x86_64-linux-cc.rul: No such file or directory
RULES/rules.cnf:56: incs/x86_64-linux-cc/Inull: No such file or directory
RULES/rules.cnf:57: incs/x86_64-linux-cc/rules.cnf: No such file or directory
p incs/x86_64-linux-cc
make: p: Command not found
make: [incs/x86_64-linux-cc/Inull] Error 127 (ignored)
/bin/sh: 1: cannot create incs/x86_64-linux-cc/Inull: Directory nonexistent
make: *** [incs/x86_64-linux-cc/Inull] Error 2


解决 :cp RULES/i686-linux-cc.rul RULES/x86_64-linux-cc.rul

原因:问题是calltree的这个版本里头没有X86064位对应的Makefile规则文件,可以直接把i686-linux-cc.rul复制为x86_64-linux-cc.rul


2.2  继续make  , 报错:

In file included from stdio/io.h:29:0,
                 from stdio/cvmod.c:21:
../include/schily.h:110:12: error: conflicting types for ‘fexecve’
/usr/include/unistd.h:558:12: note: previous declaration of ‘fexecve’ was here
../include/schily.h:186:12: error: conflicting types for ‘getline’
/usr/include/stdio.h:675:20: note: previous declaration of ‘getline’ was here
make[2]: *** [OBJ/x86_64-linux-cc/cvmod.o] Error 1
make[2]: Leaving directory `/work/leilong.su/software/calltree-2.3/libschily'
make[1]: *** [all] Error 2

还有缺少头文件之类的一堆错误


解决:

 find . -name "*.[c|h]" -exec grep getline -nH {} \;

find . -name "*.[c|h]" -exec grep fexecve -nH {} \;

将找到的文件 getline  fexecve都改个名字


原因:[http://www.3null.org/?p=439],他说,"在比较新的内核(glibc库)上编译,会出现编译不过的问题。具体现象大概像下面这个样子..." 这个样子,就是你上面看到的样子。"具体解决办法有两种,一种就是给glibc打patch,另一种就麻烦点,把冲突的命名手动都改了。"
关于解决方案,打patch,怎么打啊,手动改命名,怎么改啊。此处说来话长,我略过吧。总之,我们就知道,应该这样手动命名:把calltree源代码里所有声明、定义、调用这两个函数的地方,都把这两个函数改个名字。只要新的名字不再与posix的重名,那就没冲突了,编译就能通过了。



3  使用


以kernle为例

 calltree -np -b -dot list=start_kernel ./init/*.c > ~/start_kernel.dot

cd ~

dot -T png start_kernel.dot -o ./testhaha.png

calltree时会打印出各种already defined , 仍然可以生成dot文件, 不管它就是了

这样就生成了start_kernel的调用图


  评论这张
 
阅读(532)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017