2009-11-10 68 views
3

在AIX上,我會跑:確定爲AIX庫歸檔是否是32位,64位,或兩者兼而有之,從Linux的

ar -X32 -t libdb2.a 

,並檢查輸出,以確定是否有32位在存檔中的位對象。與-X64一樣用於檢查64位對象。但是,如果我在另一個平臺上,並且需要檢查存檔以查看它有什麼內容,那麼呢?通常當我需要檢查時,我在Linux上,但我可以輕鬆地在Solaris或HP-UX上。

我用來檢查shr.o和shr_64.o,因爲這是正在編譯的內容,但是這些文件已經開始顯示在歸檔中的實際消息中,因此這些內容的可靠性已經下降到了一個點我得到誤報。

如果任何人有一個指針,最好是我可以在perl中做的事情,那會很棒。

回答

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,並且您有一個名爲powerpc-ibm-aix5.3-ar的工具,該構建樹中的某處)。

1

我建議從.a歸檔文件中提取一個.o文件,然後在其上運行文件命令。例如:

$ 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

好的,我如何從Linux上的檔案中提取.o文件? ar似乎不願意這樣做。 – Tanktalus 2009-11-10 17:09:35

+0

我不確定你的ar爲什麼不能打印模塊。我會首先列出模塊以確保它存在。ar與土壤一樣古老,並且早已存在一段時間。 – brianegge 2010-11-05 19:53:45

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獲取更多說明。

相關問題