从Linux确定AIX的库归档是32位,64位还是两者

时间:2009-11-10 03:12:09

标签: aix

在AIX上,我会运行:

ar -X32 -t libdb2.a

并检查输出以确定存档中是否存在32位对象。与-X64类似,用于检查64位对象。但是,如果我在另一个平台上,并且需要检查存档以查看它具有什么,那该怎么办?通常我需要检查时我在Linux上,但我可以很容易地在Solaris或HP-UX上使用。

我曾经检查过shr.o和shr_64.o,因为那是正在编译的内容,但是这些内容开始出现在档案中的实际消息中,因此这些内容的可靠性已经降到了我得到了误报。

如果有人有指针,最好是我可以用perl做的事情,那就太好了。

3 个答案:

答案 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 modulesfile做同样的事情。

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以获取进一步说明。