主要针对ELF(可执行文件和可链接文件),有点反汇编的味道
VC6里有depend和dumpbin,Linux下是ldd和objdump,可查询依赖库
objdump可查到所使用cross-compile的版本,用法为objdump -s --section=.comment $prog
嵌入式版本有arm-linux-readelf:
(1)在host (x86) 机器上, 使用 arm-linux-readelf -d $target_prog 或 arm-linux-readelf -a | grep "Shared" $target_prog
(2)在target(arm)机器上,使用 /lib/ld.so.2 --list $prog
此外,file命令可以查看文件基本信息
ar 让你能查看函数库里的详细情况和用多个对象文件生成一个库文件。
经常用法:
1. ar -t libname.a //显示所有对象文件(.o文件)的列表.例: # ar t libtest.a
libtest1.o
libtest2.o
2. ar -rv libname.a objfile1.o objfile2.o ... objfilen.o //把objfile1.o--objfilen.o打包成一个库文件
nm --列出目标文件(.o)的符号清单
常用法:
nm -s filename.a/filename.o/a.out 里边所有的符号列表一清二楚。例:
# nm -s a.out
080495b8 A __bss_start
08048334 t call_gmon_start
其实ar和nm的功能基本都可以用objdump配合适当的参数实现
研究这个问题是因为之前交叉编译了QT4.7的库,但忘了使用的是不是EABI的交叉编译工具,通过arm-linux-readelf -h读取头文件,显示OS/ABI-ARM,Flags-GNU EABI,再由file显示gcc3.4.1,确定不是eabi版的
(以下转)我开始的时候并不知道怎么指定gcc的EABI,还以为4.1以上的gcc自动都是EABI,结果就是生成的内核能跑,而init进程(根文件系统的第一个进程)却运行不了。而最让我啼笑皆非的是 readelf,这绝对对我是误导的,例如:
一个ABI的文件
#readelf -h aa
ELF Header:
Magic: 7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: ARM
ABI Version: 0
Type: EXEC (Executable file)
Machine: ARM
Version: 0x1
Entry point address: 0x80f0
Start of program headers: 52 (bytes into file)
Start of section headers: 2361284 (bytes into file)
Flags: 0x2, has entry point, GNU EABI
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 4
Size of section headers: 40 (bytes)
Number of section headers: 35
Section header string table index: 32
看见Flags那行了吗?清清楚楚写的是GNU EABI,其实它是ABI(想起来台词:它看起来是一个电吹风,其实还是刮胡刀)
真正的EABI是这样的
#readelf -h a.out
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: ARM
Version: 0x1
Entry point address: 0x8130
Start of program headers: 52 (bytes into file)
Start of section headers: 2460164 (bytes into file)
Flags: 0x4000002, has entry point, Version4 EABI
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 6
Size of section headers: 40 (bytes)
Number of section headers: 36
Section header string table index: 33
相关推荐
本文将详细介绍如何查看Linux系统中.so文件或可执行程序的依赖库,以及如何查找哪些进程正在使用特定的.so文件。 首先,我们需要理解Linux中的可执行程序有两种类型:静态链接的可执行程序和动态链接的可执行程序。...
总之,依赖查看器(Depends)是排查和解决Windows应用程序因依赖库问题而无法正常运行的重要工具。通过理解和使用这个工具,我们可以更好地理解程序的运行机制,诊断并解决各种启动问题。无论你是开发者还是普通用户...
本示例演示了编译多个可执行程序,需链接动态库,静态库,且需先编译库,并且库与库之间存在依赖关系的makefile的编写方式,makefile文件内部有详细的注释,目录下也有介绍文档,请务必按照里面的步骤操作,保证可以...
这个工具对于软件开发者、系统管理员以及故障排查专家来说非常有用,因为他们需要确保所有的依赖库都已正确安装并可用,以便程序能够正常运行。 `depends.chm` 是一个帮助文件,通常包含关于如何使用该工具的详细...
dumpbin工具能帮助开发者查看可执行文件依赖哪些DLL,因此开发者可以将这些DLL文件与应用程序一起打包。但在此过程中,需要特别注意DLL文件的版本问题,因为不匹配的版本也会引发问题。 2. 应用程序无法正常启动(0...
《使用Depends进行C++应用程序依赖库查询》 在软件开发过程中,尤其是使用C++这样的系统级编程语言时,理解程序依赖的库文件至关重要。"Depends"是一款强大的工具,专用于查询C++执行程序所依赖的库,帮助开发者...
以下是对GDAL依赖库文件及其相关知识点的详细解释: 1. **投影系统库** - GDAL需要一个投影库,如`proj`或`proj4`,来处理地理坐标系统(GCS)和投影坐标系统(PCS)之间的转换。这包括EPSG编码、WKT(Well-Known ...
"Windows应用程序依赖库分析软件"就是一款专门用于检测和分析这些依赖关系的工具。它可以帮助开发者、系统管理员或普通用户了解一个可执行文件(.exe或.dll)在其运行时所依赖的外部库,以及这些库的版本和状态,...
标题中的"依赖库查看工具"是指Depends的主要功能,即检查可执行文件(.exe)和动态链接库(.dll)所依赖的其他库文件。这对于调试、移植和维护软件项目至关重要,特别是在处理跨平台或多模块系统时。 描述中提到的...
绿色软件-全面分析exe程序的dll依赖关系
Dependencies是Windows下的一款开源工具,用于查看和分析可执行文件及其依赖项。Depends(Dependency Walker)也是一个类似的工具,它可以显示程序依赖的动态链接库(DLL)、.NET程序集、OLE/COM对象等。下载并运行...
程序依赖项查看工具是开发和运维过程中不可或缺的实用软件,主要用于确保应用程序能够正常运行。它通过分析程序执行所需的外部库和组件,帮助开发者识别并解决因缺失依赖导致的问题。在编程环境中,一个程序可能需要...
"Windows打包可执行程序exe工具"就是用于解决这个问题的工具。下面将详细介绍这个过程,以及如何使用如`PackageTool`等工具来完成打包。 一、EXE打包的原理 Windows可执行文件(.exe)实质上是包含了程序代码、资源...
Dependencies是一款直观且功能强大的依赖分析工具,它允许用户查看和分析可执行文件或DLL(动态链接库)所依赖的库。这个工具可以帮助开发者了解程序运行时需要哪些外部组件,以便确保所有必要的库都已经正确安装。...
这些依赖库对于编译C++程序至关重要,因为它们提供了必要的功能和接口,使得开发者可以构建、链接和执行C++代码。以下是关于GCC-C++在CentOS 7上所需依赖库的详细解析: 1. **GLIBC (GNU C Library)**:这是Linux...
1. **安装与启动**:下载并解压"DLL依赖库查看工具"压缩包,找到可执行文件,双击运行。有些版本可能需要管理员权限才能正常工作。 2. **查看DLL依赖**:在工具的界面中,你可以输入想要检查的DLL文件的完整路径,...
- **添加依赖库:** 如果你的应用程序依赖于其他DLL文件,需要确保这些文件被包含在安装包中,并正确配置引用路径。 - **许可协议:** 添加许可协议文件,让用户在安装时同意。 - **自定义启动画面和图标:** 为...
这个插件的主要作用是帮助开发者将所有依赖的库文件(如JARs)和主程序一起打包成一个单一的JAR文件,这样用户只需双击该JAR,就能在拥有Java运行环境的机器上运行程序,类似于Windows的.exe可执行程序。 FATJAR...
"动态库依赖查看工具.rar"是一个针对Windows平台设计的实用工具,用于帮助开发者和系统管理员查看任何可执行文件或DLL所依赖的其他动态库。 这个压缩包文件"depends22_x64"可能是指Depends工具的64位版本,Depends...