'এলডিডি' দ্বারা "গতিশীল নির্বাহযোগ্য নয়" হিসাবে প্রতিবেদন করা ফাইলটি অন্য লাইব্রেরির উপর নির্ভর করে?


9

আমি নিশ্চিত হয়েছি যে আমি এই অধিকার পেয়েছি - আমি কল করি

ldd /path/to/executable

এবং এটি "গতিশীল নির্বাহযোগ্য নয়" ফেরত দেয় returns এর অর্থ এটি অন্য লাইব্রেরির উপর নির্ভর করে না, তাই না? যদি তা হয়, তবে এর অর্থ কি এটি নির্ভরতা নিয়ে চিন্তা না করেই অন্য উবুন্টু বাক্সে স্থানান্তরিত হতে পারে?

উত্তর:


3

সঠিক, তবে আমলে নেওয়ার মতো কিছু আছে।

lddম্যানপেজ থেকে :

এলডিডি ভাগ করা লাইব্রেরিগুলিতে কাজ করে না।

ldd কিছু অত্যন্ত পুরানো a.out প্রোগ্রামগুলির সাথে কাজ করে না যা সংকলক রিলিজগুলিতে ldd সমর্থন যুক্ত হওয়ার আগে নির্মিত হয়েছিল। আপনি যদি এই প্রোগ্রামগুলির মধ্যে একটিতে এলডিডি ব্যবহার করেন, প্রোগ্রামটি আরগসি = 0 দিয়ে চালানোর চেষ্টা করবে এবং ফলাফলটি অনাকাঙ্ক্ষিত হবে।


3
আর একটি কারণ হতে পারে যে বাইনারিটি 32-বিট সিস্টেমের জন্য নির্মিত হয়েছিল তবে আপনি এটি একটি 64-বিট সিস্টেমে পরীক্ষা করছেন।
ফারডিনানড প্রান্টল

@ ফারডিনানডপ্র্যান্টল যদি এটি 32 বিটের জন্য নির্মিত হয় তবে lddএখনও 32 বিটের নির্ভরতা মুদ্রণ করে।
কলমারিয়াস

@ ক্যালমারিয়াস এটি সত্য নয়, যখন আপনার কাছে 32-বিট লাইবগিসি 1 নেই। কেবলমাত্র একটি তাজা উবুন্টু সার্ভার ইনস্টলেশন সম্পর্কে যাচাই করা হয়েছে: 32-বিট বাইনারিগুলির জন্য ldd খুশি করতে আপনাকে libgcc1: i386 ইনস্টল করতে হবে।
ফলস্টাফ

1

@ ক্যালমারিয়াস সঠিক, আপনি 32 বেটের এক্সেট বিবেচনা করলেও বেসিক 32 বিট লাইব্রেরি না থাকলে এটি ঘটে।

আমি আমার সিস্টেমটি আপগ্রেড করার চেষ্টা করছি (12.04 থেকে উবুন্টু 16.04 এর একটি নতুন ইনস্টল), আমাকে একটি পুরানো প্রিপেইটিরি 32 বিট পরিষেবা ইনস্টল করতে হবে avserver, এটির প্রয়োজন নেই ia32-libs(আর উপলব্ধ নেই)। এই উপায়ে উভয় dpkgএবং apt-getঅসুখী হয় (যাই হোক না কেন আমি কি, আমার লেখার অনুরোধ জানানো হবে apt-get -f install, এবং যদি আমি যে চালানো, এটা আমি সেবা প্যাকেজ আনইনস্টল জোরাজুরি), এবং আমার সেবা শুরু করবে না।

এটি 32 বিট লাইব্রেরিগুলি নিখোঁজ হওয়ার প্রবণতার জন্য, আমি আমার পুরানো সিস্টেমটি (উবুন্টু 12.04, ia32-libsএবং 32 বিট লাইব্রেরি) চালু করেছি /sda2। সুনিশ্চিত করা /opt(আমার 32 বিট বাইনারিযুক্ত) মাউন্ট করা হয়েছে /sda2/opt, আমি chroot /sda2এবং lddতারপরে উদ্দেশ্য হিসাবে চালাতে পারি।

এটি ঠিক করতে, আমি নিজেই সমস্ত নির্ভরযোগ্য গ্রন্থাগার প্যাকেজগুলি ইনস্টল করতে পারতাম: i386 (খিলান)। তবে আমি সিদ্ধান্ত নিয়েছি যে আমার নির্ভরতাগুলি কী তা বোঝার চেষ্টা করার পরিবর্তে, আমি ওয়াইন ইনস্টল করেছি (যা বেশিরভাগ 32 বিট, এবং তাই বেসিক লাইব্রেরি এবং আরও একটি লোড ইনস্টল করে যা আমার আসলে প্রয়োজন হয় না, তবে আমি এটির সাথে ঠিক আছি)।

ঠিক করার জন্য dpkgএবং apt-get, আমি সম্পাদিত হয়েছি /var/lib/dpkg/status, আমার পরিষেবার জন্য প্যাকেজটি খুঁজে পেয়েছি এবং সরিয়েছি ia32-libs। এখন dpkgএবং apt-getখুশি

এটি হয়ে গেছে, lddআনন্দের সাথে জানিয়েছে: - root@withnail:/opt/<service path># ldd avserver linux-gate.so.1 => (0xf77a6000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf778f000) libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7772000) libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xf776b000) libresolv.so.2 => /lib/i386-linux-gnu/libresolv.so.2 (0xf7752000) libcrypt.so.1 => /lib/i386-linux-gnu/libcrypt.so.1 (0xf7720000) libktssl.so.1.0.0 => /opt/<service path>/libktssl.so.1.0.0 (0xf76cb000) libktcrypto.so.1.0.0 => /opt/<service path>/libktcrypto.so.1.0.0 (0xf756b000) libktz.so.1 => /opt/<service path>/libktz.so.1 (0xf7558000) librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf754f000) libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf73d8000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7383000) libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7366000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf71af000) /lib/ld-linux.so.2 (0x565b1000)


আপনার প্রয়োজনীয় 32 বিট লাইব্রেরিগুলি পাওয়ার জন্য ওয়াইন ইনস্টল করা খুব চালাক কৌশল!
PSitae
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.