2010-07-08 9 views
11

मुझे पीईक्यूटी/एसआईपी का उपयोग करने में कुछ परेशानी हो रही है। मुझे लगता है कि एसआईपी 64 बिट में संकलित है, लेकिन पाइथन को इसे खोजने में कुछ समस्या है।मैक ओएस एक्स पर निर्मित लाइब्रेरी 32 बिट/64 बिट की जांच कैसे करें?

 
    File "qtdemo.py", line 46, in 
    import sip 
ImportError: dlopen(/Library/Python/2.6/site-packages/sip.so, 2): no suitable image found. Did find: 
     /Library/Python/2.6/site-packages/sip.so: mach-o, but wrong architecture 
  • मैं कैसे पता चलेगा कि एक पुस्तकालय (ताकि/dylib) 32bit या 64bit है?
  • मुझे कैसे पता चलेगा कि मेरा पायथन 32 बिट या 64 बिट है?
+1

संभावित डुप्लिकेट [निर्धारित करें कि निष्पादन योग्य (या लाइब्रेरी) 32-64-बिट्स (ओएसएक्स पर) है (http://stackoverflow.com/questions/1941825/determine-if-an-executable-or- लाइब्रेरी-आईएस -32-या-64-बिट्स-ऑन-ओएसएक्स) – outis

उत्तर

16

file उपकरण निष्पादन योग्य पहचानने के लिए उपयोग किया जा सकता है।

उदाहरण:

> file /Applications/TextEdit.app/Contents/MacOS/TextEdit 
/Applications/TextEdit.app/Contents/MacOS/TextEdit: Mach-O universal binary with 2 architectures 
/Applications/TextEdit.app/Contents/MacOS/TextEdit (for architecture x86_64): Mach-O 64-bit executable x86_64 
/Applications/TextEdit.app/Contents/MacOS/TextEdit (for architecture i386): Mach-O executable i386 
6

आप उपयोग कर रहे अजगर उदाहरण में उपलब्ध आर्किटेक्चर ढूंढने के लिए:

$ file "$("$(which python)" -c "import sys;print(sys.executable)")" 
/usr/bin/python: Mach-O universal binary with 3 architectures 
/usr/bin/python (for architecture x86_64): Mach-O 64-bit executable x86_64 
/usr/bin/python (for architecture i386): Mach-O executable i386 
/usr/bin/python (for architecture ppc7400): Mach-O executable ppc 

ढूंढने के लिए अजगर वर्तमान में 32-बिट या 64-बिट चल रहा है कि क्या (10.6 उदाहरण):

$ /usr/bin/python2.6 -c "import sys;print('%x'%sys.maxint)" 
7fffffffffffffff 
$ arch -x86_64 /usr/bin/python2.6 -c "import sys;print('%x'%sys.maxint)" 
7fffffffffffffff 
$ arch -i386 /usr/bin/python2.6 -c "import sys;print('%x'%sys.maxint)" 
7fffffff 
$ arch -ppc /usr/bin/python2.6 -c "import sys;print('%x'%sys.maxint)" 
7fffffff 

python3 के लिए, विकल्प sys.maxsizeके लिए:

$ python3 -c "import sys;print('%x'%sys.maxsize)" 
7fffffff 
5
lipo -info target/libexample-df07142d9bfd950a.a 
input file target/libexample-df07142d9bfd950a.a is not a fat file 
Non-fat file: target/libexample-df07142d9bfd950a.a is architecture: x86_64 

या

lipo -info `which python` 
Non-fat file: /usr/local/bin/python is architecture: x86_64 

file प्रयोग न करें।

+0

"फ़ाइल 'का उपयोग न करें।" क्यूं कर? – chakrit

+1

@chakrit 'file' सभी लाइब्रेरी प्रकारों पर काम नहीं करता है। यह स्वरूपों का अनुमान लगाता है, इसलिए आप इसे देखेंगे: 'libn.a: वर्तमान ar archive random लाइब्रेरी' एक स्थिर लाइब्रेरी के लिए, जहां आप इसे 'लिपो' से देखेंगे: 'गैर-वसा फ़ाइल: libn.a आर्किटेक्चर है: x86_64 '। कुछ फ़ाइल प्रकारों के लिए यह काम करता है, लेकिन लिप के बजाए कुछ 'जादू परीक्षण' (मैन फ़ाइल देखें) का उपयोग करके फ़ाइल टाइप पर * अनुमान * * का उपयोग क्यों करें, यह टूल स्पष्ट रूप से इस उद्देश्य के लिए मौजूद है? – Doug

+0

व्याख्या करने के लिए धन्यवाद! – chakrit

संबंधित मुद्दे