64 বিড ফেডোরা 17 এ 32 বিট প্রোগ্রাম কীভাবে চালানো যায়?


10

যদিও অ্যান্ড্রয়েড বিকাশ সরঞ্জাম (এডিটি) বান্ডেলটি 'লিনাক্স B৪ বিট'-এর জন্য জিপ প্যাকেজ হিসাবে উপলব্ধ এটিতে নিম্নলিখিত প্রয়োজনীয়তার কথা উল্লেখ করেছে :

-৪-বিট বিতরণগুলি 32-বিট অ্যাপ্লিকেশন চালাতে সক্ষম হতে হবে।

আর শুধু প্যাকেজ গ্রহণের ত্রুটি একটি ফেডোরা 17 64 বিট সিস্টেম ফলাফলে, দৌড়ানো কারণ এটি না 'খুঁজতে' করতে বিভিন্ন উন্নয়ন সরঞ্জাম, যেমন adbবা aapt:

অপ্ট কার্যকর করতে ত্রুটি: প্রোগ্রামটি চালানো যায় না "/ হোম / জুসার / লোকাল / অ্যাড্ট-বান্ডেল-লিনাক্স / এসডিকে / প্ল্যাটফর্ম-সরঞ্জামগুলি / অপ্ট": ত্রুটি = 2, এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই: ত্রুটি = 2, এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই

'এ জাতীয় কোনও ফাইল' বিভ্রান্ত করছে না কারণ এটি সেখানে রয়েছে ($ হোম / স্থানীয় অধীনে):

adt-bundle-linux/sdk/platform-tools/aapt

তবে আমি এটি শেলের উপর দিয়ে কার্যকর করতে পারি না:

~/local $ ./adt-bundle-linux/sdk/platform-tools/aapt 
zsh: no such file or directory: ./adt-bundle-linux/sdk/platform-tools/aapt

ফাইলটির দিকে তাকাচ্ছি

$ file adt-bundle-linux/sdk/platform-tools/aapt
adt-bundle-linux/sdk/platform-tools/aapt: ELF 32-bit LSB executable, Intel 80386,
 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8,
 not stripped

আমরা দেখতে পাচ্ছি যে এটি একটি 32 বাইনারি। এবং দেখে মনে হচ্ছে যে আমার সিস্টেম (বর্তমানে) 32-বিট অ্যাপ্লিকেশন চালাতে সক্ষম নয়।

আমি কীভাবে এটি পরিবর্তন করব? আমি কীভাবে একটি বর্তমান ফেডোরা 64 বিট সিস্টেম 32 32 বিট অ্যাপ্লিকেশন চালাতে সক্ষম করব?

(অবশ্যই কেউ জিজ্ঞাসা করতে পারে যে কেউ কেন 'লিনাক্স bit৪ বিট' নামক বাইনারি প্যাকেজে 32 বিট বাইনারি রাখে ...)


আসফএফডোরার উত্তর সহ একই প্রশ্ন: জিজ্ঞাসা
জার্মটভিডিজক

আপনি কেন এই বার্তাটি পাচ্ছেন তা বোঝার জন্য:
-৪

উত্তর:


9

গ্রহনটি সন্ধান করতে না পারা adbইত্যাদি সম্পর্কিত কারণ এটি 32-বিট ভাগ করে নেওয়া লাইব্রেরিগুলি সিস্টেমে চালনার প্রয়োজন না থাকলে এগুলি কার্যকর করা যায় না।

32-বিট লাইব্রেরি সম্পর্কিত, পরিস্থিতি মোটামুটি সহজ: আপনার কেবলমাত্র 32-বিট libs ইনস্টল করতে হবে to আমার এখানে 64৪-বিট ফেডোরা ১ install ইনস্টল-এ, প্রাথমিক 64৪-বিট লাইব্রেরিগুলি / usr / lib64-এ রয়েছে এবং usচ্ছিক 32-বিট libs / usr / lib এ রয়েছে। সুতরাং, আমি যদি lddএসডিকে / প্ল্যাটফর্ম-সরঞ্জাম / অ্যাডবিতে কল করি :

linux-gate.so.1 =>  (0xf7791000)
librt.so.1 => /lib/librt.so.1 (0xf776c000)
libncurses.so.5 => /lib/libncurses.so.5 (0xf7747000)
libpthread.so.0 => /lib/libpthread.so.0 (0xf772d000)
libstdc++.so.6 => /lib/libstdc++.so.6 (0xf7644000)
libm.so.6 => /lib/libm.so.6 (0xf7618000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xf75fb000)
libc.so.6 => /lib/libc.so.6 (0xf7449000)
/lib/ld-linux.so.2 (0xf7792000)
libdl.so.2 => /lib/libdl.so.2 (0xf7444000)
libtinfo.so.5 => /lib/libtinfo.so.5 (0xf7424000)

লক্ষ্য করুন যে এগুলি সমস্ত / লিবিতে রয়েছে, যা / usr / lib (/ usr / lib64 নয়) এর একটি সিমিলিঙ্ক। দেখুন:

»file /lib/libc.so.6
/lib/libc.so.6: symbolic link to `libc-2.15.so'
»file /lib/libc-2.15.so
/lib/libc-2.15.so: ELF 32-bit LSB shared object [...]

একটি 32-বিট স্ট্যান্ডার্ড সি লাইব্রেরি। আপনি যা করতে পারেন তা হ'ল 32-বিট এসডি কে সরঞ্জামগুলি যাচাই করা এবং সেগুলি কীসের সাথে যুক্ত রয়েছে তা পরীক্ষা করে দেখুন ldd। আমার কাছে হাতে উদাহরণ নেই, তবে কোনও কিছু অনুপস্থিত থাকলে এরকম কিছু lddরিপোর্ট পাওয়া যায় :

libc.so.6 => ??????

প্রথমে , ldd কাজ করার জন্য আপনাকে 32-বিট লোডারের প্রয়োজন হবে যা 32-বিট গ্লিবিকের সাথে আসে (এটি ছাড়া, এলডিডি এটিকে একটি নির্বাহযোগ্য ফাইল হিসাবে ডেকে আপনাকে কিছুই বলবে না):

»yum search glibc
glibc.i686 : The GNU libc libraries
glibc.x86_64 : The GNU libc libraries

এটি কেটে গেছে, তবে x86_64 প্যাকেজটি আপনার কাছে ইতিমধ্যে রয়েছে; i686 32-বিট সংস্করণ। সুতরাং এটি ইনস্টল করুন।

আপনার কোনও 'ডেভেল' প্যাকেজ দরকার নেই, কারণ কিছুই সংকলিত হয় না। এর বাইরে, শিক্ষিত অনুমান এবং yum whatprovides/ yum searchসহায়তা করা উচিত (অ্যাডাবির তালিকার দিকে তাকানো, এছাড়াও সি ++ লিব, এনক্রেস, পাইথ্রেড এবং আমি জানি না এমন কয়েকটি বিষয়গুলির 32-বিট সংস্করণ রয়েছে)।

ব্যবহার সম্পর্কে দ্রুত পরামর্শ whatprovides:

»yum whatprovides libtinfo
No matches found.
»yum whatprovides libtinfo.so.5
[2 matches]
»yum whatprovides "*/libtinfo.so.5"
[4 matches]

;)


ঠিক আছে, আমি এর মাধ্যমে প্রদর্শিত লাইব্রেরির i686 সংস্করণ ইনস্টল করার চেষ্টা করব ldd। কারণগুলির জন্য: আমি দৃ not়বিশ্বাসী নই file, adbপ্রদর্শনগুলির বান্ডিল সংস্করণে ফোন করছি : ELF 32-বিট এলএসবি এক্সিকিউটেবল, ইন্টেল 80386 - এআরএম অনুকরণের সাথে কিছুই করার নেই - এবং / usr / bin / adb (অ্যান্ড্রয়েড-সরঞ্জাম ফেডোরা প্যাকেজ থেকে) ইএলএফ 64-বিট এলএসবি এক্সিকিউটেবল, এক্স 86-64 হিসাবে প্রকৃতপক্ষে উপলব্ধ ।
maxschlepzig

আমি যদি এতে এলডিডি কল করি তবে adt-bundle-linux/sdk/platform-tools/adbএটি 'ডায়নামিক এক্সিকিউটেবল নয়' প্রদর্শন করে। PATH সম্পর্কিত - এটি সমস্যা নয় - ./adt-bundle-linux/sdk/platform-tools/adbটার্মিনালে যেমন উদাহরণস্বরূপ পুরোপুরি নির্দিষ্ট করে কাজ করে না (ফলস্বরূপ 'zsh: এ জাতীয় কোনও ফাইল বা ডিরেক্টরি [..]' নেই)।
ম্যাক্সচলেপজিগ

আপনি কি এখনও glibc.i686 ইনস্টল করেছেন? যেমনটি আমি বলেছিলাম, এলডিডি কাজের জন্য আপনার (সম্ভবত) একটি 32-বিট লোডার প্রয়োজন, এবং এটি গ্লিবসি প্যাকেজটির সাথে থাকবে। ডাব্লুআরটি অ্যাডবি একটি 32-বিট ইন্টেল আর্চ হচ্ছে এটি কারণ এটি আপনার সিস্টেম, এআরএম-এর জন্য সংকলিত কিছু সেখানে কাজ করবে না। যাইহোক, একই 32-বিট স্টাফগুলি এআরএম-এর জন্য সংকলন করা যেতে পারে এবং আমি কল্পনা করি এর অধ্যায়গুলি অ্যান্ড্রয়েড ডিভাইসগুলিতে ব্যবহৃত হয়। আমি স্বীকার করি যে এটি প্রয়োজনীয়তা সম্পর্কে ভুল হতে পারে, তবে যে কোনও ক্ষেত্রে এটি যা উপলভ্য এবং এটি আসলে কোনও ঝামেলা নয়।
গোল্ডিলোকস

পাথ ডাব্লুআরটি, সম্ভবত এটি গ্রহনের জন্য প্রয়োজনীয় নয় এবং (যেমন আপনি বলেছেন) কমান্ড লাইনেও একই ত্রুটিটি পেতে পারেন যদি ফাইলটি কোনওভাবেই কার্যকর করা যায় না। শুধু libs ইনস্টল করুন, ইত্যাদি, এবং আপনি খুঁজে পাবেন।
স্বর্ণলোকস

2
এমুলেটরটি 32-বিট প্রোগ্রাম এবং 32-বিট প্রসেসরযুক্ত এমুলেটেড প্ল্যাটফর্মের মধ্যে কোনও সম্পর্ক নেই। অ্যান্ড্রয়েড এমুলেটরটি আসলে কেমু ভিত্তিক, যা হোস্ট আর্কিটেকচার নির্বিশেষে আর্মভ 7 (32-বিট), আর্মভ 8 (64-বিট), এক্স 86, এমডি 64, মিপস, মিপস 64 এবং আরও অনেককে অনুকরণ করতে পারে।
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'

8

আপনাকে 32 বিট গ্লিবিসি ইনস্টল করতে হবে:

# yum install glibc.i686

এটি একটি 32 বিট বাইনারি কার্যকর করার চেষ্টা করার সময় বিভ্রান্তিকর 'এমন কোনও ফাইল বা ডিরেক্টরি নেই' বার্তাটি সরিয়ে দেয়। সেই সাথে 64 বিট ফেডোরা সিস্টেম 32 বিট বাইনারি কার্যকর করতে সক্ষম।

এটি 32 বিট ডায়নামিক এক্সিকিউটেবলকে lddফোন lddকরার সময় বিভ্রান্তিমূলক 'ডায়নামিক এক্সিকিউটেবল নয়' বার্তাও সরিয়ে দেয় ।

এখন আপনাকে অনুপস্থিত 32 বিট লাইব্রেরিগুলি ইনস্টল করতে হবে যার অন্তর্ভুক্ত বাইনারিগুলি adt-bundle-linux/sdk/platform-toolsলিঙ্কযুক্ত:

# yum install zlib.i686 libstdc++.i686 ncurses-libs.i686 libgcc.i686

এটাই.

পটভূমি

উপরের প্যাকেজটির নামগুলি কীভাবে উপার্জন করতে হবে তার কিছু ব্যাকগ্রাউন্ড। উদাহরণস্বরূপ আউটপুট এ খুঁজছেন

$ ldd adb
linux-gate.so.1 =>  (0xf774f000)
librt.so.1 => /lib/librt.so.1 (0xf7725000)
libncurses.so.5 => not found
libpthread.so.0 => /lib/libpthread.so.0 (0xf770b000)
libstdc++.so.6 => not found
libm.so.6 => /lib/libm.so.6 (0xf76df000)
    [..]

এর মানে হল যে 2 টি গ্রন্থাগার এখনও অ্যাডাবির জন্য অনুপস্থিত।

প্রতিটি 'পাওয়া যায় নি' এর জন্য আমাদের প্যাকেজের নামটি দেখতে হবে, যেমন:

$ yum whatprovides '*libstdc++.so.6'
[..]
libstdc++-4.7.2-2.fc17.i686 : GNU Standard C++ Library
[..]

এখন আমরা প্যাকেজ বেস নাম নিই এবং 32 বিট সংস্করণটি পেতে এটিতে '.i686' যুক্ত করব।


এই উত্তরটি দুর্দান্ত, বিশেষত প্রথম অংশ - সত্যই ইনস্টল করা i386 বাইনারিগুলির সাথে সঠিকভাবে কাজ glibc.i686করতে দেয় ldd
ক্রিস্টিয়ান

2

আপনি এটির সাথে প্রয়োজনীয় প্যাকেজ ইনস্টল করতে পারেন:

sudo yum install redhat-lsb.i686
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.