जवाबों:
एक अन्य विकल्प है lipo
; इसका आउटपुट संक्षिप्त और अधिक पठनीय है otool
।
एक उदाहरण:
% lipo -info /usr/lib/libiodbc.a
Architectures in the fat file: /usr/lib/libiodbc.a are: x86_64 i386 ppc
% lipo -info libnonfatarchive.a
input file libnonfatarchive.a is not a fat file
Non-fat file: libnonfatarchive.a is architecture: i386
%
file
शायद आपको बताएंगे। otool
निश्चित रूप से सक्षम होना चाहिए। लेकिन मैं file
पहले की कोशिश करेंगे , जैसे
logan:/Users/logan% file d2
d2: Mach-O executable ppc
संग्रह के साथ उदाहरण:
logan:/Users/logan% file /usr/lib/libMallocDebug.a
/usr/lib/libMallocDebug.a: Mach-O universal binary with 2 architectures
/usr/lib/libMallocDebug.a (for architecture i386): current ar archive random library
/usr/lib/libMallocDebug.a (for architecture ppc): current ar archive
file
अक्सर विफल रहता है।
जैसा कि पहले उल्लेख किया गया है, file
हमेशा काम नहीं करता है। otool -hv -arch all
शायद सबसे करीबी चीज़ है जो काम करने की गारंटी है - यह लाइब्रेरी में हर एक ऑब्जेक्ट फ़ाइल के लिए आर्किटेक्चर की जानकारी देता है।
उदाहरण:
% otool -hv /sw/lib/libfftw3.a पुरालेख: /sw/lib/libfftw3.a /sw/lib/libfftw3.a(align.o): मच हेडर मैजिक कैप्टाइप cpusubtype caps filetype ncmds sizeofcmds झंडे MH_MAGIC_64 X86_64 सभी 0x00 OBJECT 3 336 SUBSECTIONS_VIA_SYMBOLS /sw/lib/libfftw3.a(alloc.o): मच हेडर मैजिक कैप्टाइप cpusubtype caps filetype ncmds sizeofcmds झंडे MH_MAGIC_64 X86_64 सभी 0x00 OBJECT 3 416 SUBSECTIONS_VIA_SYMBOLS ...
एक विकल्प के रूप में, मैंने पाया है कि objdump
यह अच्छी तरह से काम कर सकता है। एक उदाहरण के रूप में, मेरे वातावरण में मैं vxWorks के साथ पुस्तकालय अभिलेखागार का निर्माण करता हूं और उन्हें अन्य परियोजनाओं में जोड़ने की आवश्यकता है। यह जांचने के लिए कि क्या आर्काइव सही आर्किटेक्चर है, मैं निम्नलिखित जैसा कुछ कर सकता हूं (बैश सिंटैक्स):
if [ "$(objdumpsparc -a ${ARCHIVE_FILE} 2>&1 | ggrep -cvP 'elf32-sparc-vxworks')" -ne "0" ]; then
echo "Cannot build with ${ARCHIVE_FILE}, it contains one or more non-sparc components"
fi;
यह उदाहरण ठीक नहीं है, क्योंकि कुछ पंक्तियाँ यह दर्शाती हैं कि योगिनी-स्पार्क-वीएक्सवर्क्स नहीं कहते हैं, लेकिन इसे अनुकूलित करना काफी आसान है।
इसका एक अच्छा लाभ यह है कि objdump
, या इसी तरह नाम वाले संस्करण को, अधिकांश * निक्स ऑपरेटिंग सिस्टम पर स्थापित किया गया है, जबकि अन्य प्रतिक्रियाओं में सुझाए गए उपकरण नहीं हैं।
संपादित करें यह सिर्फ मेरे लिए ओपी OSX पर पूछ रहा था। मैं क्षमाप्रार्थी हूं।
objdump
आप MacPorts के माध्यम से GNU Binutils स्थापित कर सकते हैं। सभी उपलब्ध आर्किटेक्चर देखने के लिए बस निष्पादित करें port search binutils
। मूल विकास के उपकरण संघर्ष से बचने के लिए उपसर्ग किए जाते हैं (उदाहरण के gobjdump
बजाय objdump
)। आप सुविधा के लिए एक उपनाम बनाना चाहते हैं।
यह बैश स्क्रिप्ट आपको प्रोग्रामेटिक रूप से एक चर में आर्किटेक्चर की सूची प्राप्त करने में मदद करेगी।
list_archs.sh:
#! /bin/bash
lipo -info $1 | sed -En -e 's/^(Non-|Architectures in the )fat file: .+( is architecture| are): (.*)$/\3/p'
उपयोग उदाहरण:
./list_archs.sh /usr/lib/libc.dylib
x86_64 i386