Ubuntu 64-बिट में 32-बिट ऐप कैसे चलाएं?


132

मैंने Ubuntu 14.04 और वर्तमान Android विकास SDK स्थापित किया, जिसमें 32-बिट निष्पादन योग्य हैं। मैंने पाया कि मैं उन 32-बिट बायनेरिज़ को नहीं चला सकता। उन्हें बैश से शुरू करने की कोशिश मुझे एक त्रुटि देती है:

$ ./adb
bash: ./adb: No such file or directory

हालांकि यह वहाँ है:

$ ls -al ./adb
-rwxrwxrwx 1 thomas thomas 1231255 Jan 17 13:31 ./adb
$ file ./adb
./adb: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped. Same symptom for all the other 32-bit tools in the Android SDK. 

पुराने दिनों में कोई भी 32-बिट समर्थन प्राप्त करने के लिए 64-बिट उबंटू पर 32-बिट लाइब्रेरी स्थापित कर सकता था, लेकिन वह अब काम नहीं करता है।

मैं 64-बिट Ubuntu 14.04 पर 32-बिट ऐप्स कैसे चलाऊं?


जवाबों:


186

एक 64-बिट बहु वास्तुकला Ubuntu पर एक 32-बिट निष्पादन योग्य फ़ाइल चलाने के लिए आपको जोड़ने के लिए i386वास्तुकला और तीन पुस्तकालय पैकेज इंस्टॉल libc6:i386, libncurses5:i386और libstdc++6:i386:

sudo dpkg --add-architecture i386

या यदि आप Ubuntu 12.04 LTS (सटीक पैंगोलिन) का उपयोग कर रहे हैं या नीचे, इसका उपयोग करें:

echo "foreign-architecture i386" > /etc/dpkg/dpkg.cfg.d/multiarch

फिर:

sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

यदि असफल हो, तो भी करें

sudo apt-get install multiarch-support

इन चरणों के बाद, आपको 32-बिट अनुप्रयोग चलाने में सक्षम होना चाहिए:

./example32bitprogram

@AvinashRaj इससे मुझे मदद मिली! हालांकि, वास्तव में क्या करने के लिए अंतिम आदेश "sudo ./adb" है?
मार्सेल

1
यह 32 बिट एडीबी बाइनरी फ़ाइल को निष्पादित करता है जो वर्तमान निर्देशिका में मौजूद था।
अविनाश राज

1
14.04 उबंटू पर काम करने के लिए, मुझे भी स्थापित करना था lib32z1, लेकिन यह libc6-i386 (अंतर, हाइफ़न नोटिस, कोलन नहीं) में खींच लिया।
क्रिस बेट्टी

मैं अपने चरणों किया था, libc6:i386, libncurses5:i386, libstdc++6:i386नवीनतम संस्करण और मैन्युअल रूप से स्थापित करने के लिए सेट कर रहे हैं। लेकिन इसके बाद यह कहता है: " Soma packages could not be installed.This may mean you have requested impossible situation or you are using unstable distribution ..." और असमत निर्भरताएं: libstdc++6-4.4-dev:i386निर्भर करती हैं g++-4.4:i386(अभ्यस्त नहीं)। संघर्ष: libstdc++6-4.4-dbg:i386... और अन्य संघर्षों के बारे में libstdc++6-4.4/6/7आदि क्या गलत है या क्या मुझे इसे छोड़ देना चाहिए जैसा कि अभी है?
फ्रेड्रिक गॉस


9

"ऐसी कोई फ़ाइल या निर्देशिका" आपके बाइनरी होने पर प्रकट नहीं हो सकती है, लेकिन इसमें कुछ पुस्तकालयों का अभाव है। यदि आप build-essentialपैकेज स्थापित करते हैं , तो आपके पास lddकमांड उपलब्ध होगी । यह कमांड ldd ./adb | grep notआपको दिखाएगा कि पुस्तकालय क्या गायब हैं। सिर्फ उपयुक्त के साथ i386 आर्क में इन पुस्तकालयों को स्थापित करें। इस तरह: apt-get install libmissing:i386 खबरदार, कुछ छोटी गाड़ी पैकेज 64 बिट संस्करण firs को हटाने की कोशिश करेंगे।


धन्यवाद, यह अजीब त्रुटि संदेश की व्याख्या करेगा। मैं पहले असमंजस में था कि बैश मुझे यह त्रुटि क्यों देगा (कुछ त्रुटि के बजाय बच्चे की प्रक्रिया से अधिक स्पष्ट रूप से जो पुस्तकालयों में याद आती है), लेकिन अब मुझे लगता है कि बैश सिर्फ एग्ज़ॉस्ट (3) को लौटता हुआ देखता है और इसे प्रिंट करता है।
थॉमस स्टूफ़

5

और अगर आप "adb" का उपयोग करना चाहते हैं तो इसके लिए एक पैकेज है:

sudo apt-get install android-tools-adb

और लगभग 32-बिट लाइब्रेरी - केवल:

sudo apt-add-architecture i386

काफी होगा।


टिप के लिए धन्यवाद, लेकिन मैं Google से डाउनलोड किए गए एंड्रॉइड टूल का उपयोग करना चाहता था, न कि उबंटू रिपोज में। मैं उस पैकेज की पूर्णता के बारे में भी निश्चित नहीं हूं।
थॉमस स्टुफ़

उबंटू रिपॉजिटरी में नया संस्करण होना चाहिए। पैकेज में केवल अदब है। यदि आप
फास्टबूट

3

इसके अतिरिक्त ज़न्ना और अविनाश राज के उत्कृष्ट उत्तर के लिए मुझे gcc-multilib भी स्थापित करना पड़ा:

sudo apt-get install gcc-multilib

संभवतः यह इसलिए है क्योंकि मैं 64 बिट पर एक पुराने जीसीसी संस्करण को चलाना चाहता था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.