Ber*_*rgP 6 arm file build cmake otool
我用cMake为ARM7构建了一些静态库.通常,当您对.a文件使用next命令时,它会显示以下体系结构:
FE
mac:libs User$ file ./libcurl.a
./libcurl.a: Mach-O universal binary with 3 architectures
./libcurl.a (for architecture armv6): current ar archive random library
./libcurl.a (for architecture armv7): current ar archive random library
./libcurl.a (for architecture i386): current ar archive random library
Run Code Online (Sandbox Code Playgroud)
或者fe
mac:libs User$ otool -vf ./libboost_regex.a
Fat headers
fat_magic FAT_MAGIC
nfat_arch 3
architecture armv6
cputype CPU_TYPE_ARM
cpusubtype CPU_SUBTYPE_ARM_V6
capabilities 0x0
offset 68
size 9550024
align 2^2 (4)
architecture armv7
cputype CPU_TYPE_ARM
cpusubtype CPU_SUBTYPE_ARM_V7
capabilities 0x0
offset 9550092
size 9390544
align 2^2 (4)
architecture i386
cputype CPU_TYPE_I386
cpusubtype CPU_SUBTYPE_I386_ALL
capabilities 0x0
offset 18940636
size 9595040
align 2^2 (4)
Run Code Online (Sandbox Code Playgroud)
但现在,当我构建我的图书馆时,"otool"和"file"无法显示它的架构.
mac:libs User$ otool -vf ./mylib_meta.a
Archive : ./mylib_meta.a
Run Code Online (Sandbox Code Playgroud)
这是什么意思?建立我的图书馆可以犯哪些错误?
更新: 伊戈尔,谢谢!
我用命令解压缩了目标文件:
ar -t mylib.a
ar -xv mylib.a myobj.o
-t显示二进制文件列表
-xv提取具体的二进制文件
Apple使用两种形式的AR档案.第一个与传统的Unix归档("a.out archive")非常相似 - 基本上只是一堆.o文件与前面的符号索引粘在一起:
"<!arch>\n"
header 0
SYMDEF entry
header 1
object 1
header 2
object 2
...
Run Code Online (Sandbox Code Playgroud)
要确定此归档所针对的体系结构,您需要提取至少一个目标文件并使用file或otool在其上.存档标题本身没有此信息.(事实上,目标文件不一定都是针对同一个arch,理论上你可能有任何类型的文件,而不仅仅是对象,但这不太可能.)您可以使用该ar实用程序从存档中提取单个文件.
另一种是Apple自己的发明.他们采用了用于多拱Mach-O可执行文件的"Fat二进制/通用二进制"概念,并将其用于存档.所以,"胖"档案看起来像这样:
Fat Mach-O header
Architecture 1 header --+
Architecture 2 header --|--+
Architecture 3 header --|--|--+
[padding] | | |
Archive 1 <-------------+ | |
Archive 2 <----------------+ |
Archive 3 <-------------------+
Run Code Online (Sandbox Code Playgroud)
在这种情况下file,otool可以查看fat标头并列出支持哪些体系结构.
要创建或编辑胖文件(存档和可执行文件),可以使用该lipo工具.
| 归档时间: |
|
| 查看次数: |
3682 次 |
| 最近记录: |