rpm debuginfo包问题
操作系统:CentOS 5.6
请问:如何把应用程序中用到so动态链接库的debug调试信息打包到rpm的debuginfo包中。
具体情况是这样,原来有个程序,后来我给这程序做个插件,插件原来和原有程序是分开编译的,是独立的,只是运行时程序加载插件。
因为程序不断更新,我需要把插件和原有程序一起编译,原有程序是采用auto工具来做的,我做完相关修改,编译,打包,生成的rpm包安装之后是包含我做的插件的,
可问题是,打包的 rpm debuginfo 中不包含问插件的debug调试信息,调试起来郁闷之极。
于是,看了一下make rpm的输出
发现生成debuginfo包用的是 /usr/lib/rpm/find-debuginfo.sh 脚本,发现脚本大体执行过程就是查找ELF文件什么,然后找到其中的debug信息需要的文件,并把文件打包。
我想把我的插件的调试信息一起打包到原有的rpm debuginfo包中。
请教各位大侠,帮个忙。看看能否把插件的调试信息一并打包到rpm的debuginfo包中。小弟不胜感激
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
想了一个不是办法的办法
因为find-debuginfo.sh 脚本主要功能是搜索可执行目录下的elf文件,首先说明so文件也是一个ELF文件,所以我们只要把so文件放入安装时用指定权限安装到可执行目录即可
到时,find-debuginfo.sh 自动会根据so文件导出其中debug信息,然后在debuginfo包中打入相应的so调试所需要的文件,基于此:
我修改了生成so文件的目录的makefile.am 文件,添加如下内容
install-data-local:
/usr/bin/install -c -m 755 xxx.so $(DESTDIR)/usr/local/bin
其中上文中/usr/local/bin 可以在configure.ac中另行定义。
大体意思是,把生成的so文件到安装到了一个bin目录,此bin目录是find-debuginfo.sh 搜寻的目录,并打包所有可执行文件,包括so文件,的debuginfo包了。
上面的做法有个问题:
安装时会安装双份xxx.so文件,一份安装到bin目录(多余),一份安装到 lib 目录(正常)
所以为了修正这个问题,我需要在相应 spec文件中添加如下内容:
%post
bindir=/usr/local/bin/
rm -f $bindir/*.so
意思很简单了,当我们拿着rpm包安装时(不是debuginfo包),安装完成之后,执行删除bin目录下so文件的操作
综合以上,我们既能debuginfo包中打入相应的so调试需要的文件,也能实现比较GOOD的安装。
以上办法不得以而为之,如有更好办法,请各位GGJJ DDMM们踊跃拍砖。感谢大家