转载时请注明出处和作者联系方式
文章出处:http://www.limodev.cn/blog
作者联系方式:李先静 <xianjimli at hotmail dot com>
PC 上可以用ldd显示共享库的依赖关系,但它不能显示交叉编译出来的共享库。要显示交叉编译的共享库,通常做的法是在目标板上用/lib/ld- linux.so.2 –list来显示。那有点有麻烦,由于通常我们并不关心所依赖共享库的加载地址,所以自己写了小程序来实现这个功能,顺便学习一下BFD的使用方法。
o 源代码
static void show_so_dependance(bfd* b,asection* s)
{
char* str = NULL;
char* buff = NULL;
size_t length = 0;
length = s->size;
buff = (char*)malloc(length + 1);
bfd_get_section_contents(b,s,buff,length);
buff[length] = '/0';
for(str = buff; str < (buff + length); str += (strlen(str) + 1))
{
if(strstr(str,".so") != NULL)
{
printf(" ");
printf("%s/n",str);
}
}
free(buff);
return;
}
int main(int argc,char* argv[])
{
int i = 0;
bfd* b = NULL;
asection* s = NULL;
char **matching = NULL;
bfd_init();
if(argc < 2)
{
printf("usage: %s filename/n",argv[0]);
return 0;
}
b = bfd_openr(argv[1],NULL);
if(bfd_check_format_matches (b,bfd_object,&matching))
{
if((s = bfd_get_section_by_name(b,".dynstr")) != NULL)
{
show_so_dependance(b,s);
}
}
bfd_close(b);
return 0;
}
o 编译
gcc -g depend_so.c -lbfd -liberty -o depend_so
o使用方法
[root@lixj bfd]# ./depend_so /usr/bin/xmlwf
libexpat.so.1
libc.so.6
/lib/ld-linux.so.2