在AIX上,我会运行:
ar -X32 -t libdb2.a
并检查输出以确定存档中是否存在32位对象。与-X64类似,用于检查64位对象。但是,如果我在另一个平台上,并且需要检查存档以查看它具有什么,那该怎么办?通常我需要检查时我在Linux上,但我可以很容易地在Solaris或HP-UX上使用。
我曾经检查过shr.o和shr_64.o,因为那是正在编译的内容,但是这些内容开始出现在档案中的实际消息中,因此这些内容的可靠性已经降到了我得到了误报。
如果有人有指针,最好是我可以用perl做的事情,那就太好了。
答案 0 :(得分:1)
我建议从.a存档中提取一个.o文件,然后在其上运行file命令。例如:
$ file fortune/fortune.o
fortune/fortune.o: ELF 32-bit MSB relocatable, SPARC, version 1 (SYSV), not stripped
file
不是每个系统的标准,但可以轻松编译。或者,有一个couple of perl modules与file
做同样的事情。
ar
提供p
命令,用于打印相关文件。例如:
$ ar p libcurl.a base64.o > /tmp/base64.o
$ file /tmp/base64.o
base64.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
答案 1 :(得分:1)
我认为没有一种简单的方法。如果创建两个AIX归档,一个32位和一个64位,如下所示:
$ cat a.c
int foo (void) { return 42; }
$ xlc -q32 a.c -c -o a32.o
$ xlc -q64 a.c -c -o a64.o
$ ar -X32 cr a32.a a32.o
$ ar -X64 cr a64.a a64.o
你最终得到了linux ar
不具有可读格式的档案:
$ file a32.a a64.a
a32.a: archive (big format)
a64.a: archive (big format)
$ ar t a32.a
ar: a32.a: File format not recognized
$ ar t a64.a
ar: a64.a: File format not recognized
我尝试使用strings
查看档案中是否有任何明显内容,但一无所获。你剩下的选择是构建一个目标为AIX的binutils包(下载binutils,使用选项--target=powerpc-ibm-aix5.3
进行配置,运行make
并vo:你在这个版本的某个地方有一个名为powerpc-ibm-aix5.3-ar
的工具树)。
答案 2 :(得分:0)
所以...我迟到了一年,但我遇到了同样的问题。这是我如何解决它,我希望它可以帮助某人:
$ ar t mylib.a
myobj1.o
myobj2.o
myobj3.o
$ mkdir /tmp/mylib
$ cp mylib.a /tmp/mylib
$ cd /tmp/mylib
$ ls
mylib.a
$ ar x mylib.a
$ ls
mylib.a
myobj1.o
myobj2.o
myobj3.o
$ file *
可能的结果:
mylib.a: current ar archive
myobj1.o: ELF 64-bit (...)
myobj2.o: ELF 64-bit (...)
myobj3.o: ELF 64-bit (...)
OR
mylib.a: current ar archive
myobj1.o: ELF 32-bit (...)
myobj2.o: ELF 32-bit (...)
myobj3.o: ELF 32-bit (...)
说明: 归档库文件只是“.o”文件的集合,当您使用ar的“t”参数列出归档的内容时,当您使用ar的“x”参数时,您将其解压缩。输入man ar以获取进一步说明。