লাইব্রেরির পথে রয়েছে কিনা তা সন্ধান করুন


15

ধরে নিচ্ছি যে কোনও প্রোগ্রামের দ্বারা কোনও লাইব্রেরি ইনস্টল করা এবং ব্যবহারযোগ্য কিনা তা আমি পরীক্ষা করতে চাই। ldconfig -p | grep mylibএটি সিস্টেমে ইনস্টল করা আছে কিনা তা জানতে আমি ব্যবহার করতে পারি । কিন্তু যদি গ্রন্থাগারটি কেবল সেটিংয়ের মাধ্যমে জানা যায় LD_LIBRARY_PATH?

সেক্ষেত্রে প্রোগ্রামটি গ্রন্থাগারটি সন্ধান করতে সক্ষম হতে পারে তবে তা ldconfigপাবেন না। গ্রন্থাগারটি সংযুক্ত লিঙ্কার পথে রয়েছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি ?

আমি যোগ করব যে, আমি একজন সমাধান এমনকি যদি আমি আসলে হাতে প্রোগ্রাম (যেমন প্রোগ্রামটি কম্পাইল হয় না) না থাকে কাজ করবে, আমি শুধু জানাতে চাই যে, একটি নির্দিষ্ট গ্রন্থাগার বিদ্যমান চান তাদের জন্য অপেক্ষায় থাকবো ld' s পাথ।


2
ldd <binary>লিঙ্কযুক্ত সমস্ত লাইব্রেরি পথে রয়েছে কিনা তা আপনি পরীক্ষা করতে ব্যবহার করতে পারেন। সম্ভবত আরও মার্জিত উপায় আছে।
টমাস

@ থমাস আমি মনে করি আপনার মন্তব্যের জবাব দেওয়া উচিত। lddঠিক এই উদ্দেশ্যে কাজ করে।
দীর্ঘমেয়াদী

1
@ থমাস - তবে আমি কি যদি প্রোগ্রামটি এখনও সংকলন না করে এবং সেই পাঠাগারটি সংকলনের জন্য প্রয়োজন?
এনবিউবিস

@ ইজর্জেট - আমার সম্পাদনা / মন্তব্য দেখুন
nbubis

@ এনবুবিস: আপনার যখন সংকলনের জন্য লাইব্রেরি দরকার তখন আপনার সাধারণত LIBRARY_PATHপরিবেশের পরিবর্তনশীল ব্যবহার করতে হয় যা gccসংকলক দ্বারা দেখা হয় । LIBRARY_PATHএনভায়রনমেন্ট ভেরিয়েবল এছাড়াও ডিরেক্টরি একটি কোলন seperated তালিকা রয়েছে।
টমাস

উত্তর:


15

ldconfig এতে অ্যাক্সেস রয়েছে এমন সমস্ত লাইব্রেরি তালিকাভুক্ত করতে পারে। এই লাইব্রেরিগুলিও এর ক্যাশে সংরক্ষণ করা হয়।

/sbin/ldconfig -v -Nসমস্ত সাধারণ লাইব্রেরি পাথ ক্রল করবে, ক্যাশে পুনর্গঠন না করে সমস্ত উপলব্ধ গ্রন্থাগারগুলি তালিকাবদ্ধ করবে (আপনি যদি মূল-নিরপেক্ষ ব্যবহারকারী হন তবে এটি সম্ভব নয়)। এটি এলডি_লিবিআরএআইপিএটিএইচ অ্যাকাউন্ট গ্রন্থাগারগুলিতে গ্রহণ করে না (সম্পাদনার আগে এই পোস্টটি যা বলেছে তার বিপরীতে) তবে আপনি নীচের লাইনটি ব্যবহার করে কমান্ড লাইনে অতিরিক্ত পাঠাগারগুলি পাস করতে পারেন:

/sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH)

ldconfig 1980 এর দশকের একটি সরঞ্জাম যা 1990 এর দশকে দেওয়া হয়েছিল। এই কারণে, ldconfigপোর্টেবল যেমন শুধুমাত্র বাস্তবায়নের যে SunOS-4.0 এর উপর ভিত্তি করে প্রযোজ্য নয় a.out1987 থেকে ভিত্তি করে গতিশীল linker
schily

এটি কীভাবে কেবল এলডি_লিবিআরএআইএফএটিএইচ-এ থাকা লিবিস তালিকাবদ্ধ করতে সহায়তা করে? আমি অনুমান করি যে এটি পার্স করার জন্য আমি কোনও স্ক্রিপ্ট লিখতে পারি এবং তারপরে এটি ldconfig এর মাধ্যমে পড়তে পারি তবে এটি একটি ওভার কিলের মতো মনে হয়।
এনবিউবিস

1
@ এনবুবিস আপনি সর্বদা LD_LIBRARY_PATH এ লাইব্রেরি ldconfig এ পাস করতে পারবেন। /sbin/ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH)আমার স্বাদ থেকে ওভারকিল খুব বেশি না পছন্দ ।
দীর্ঘমেয়াদী

@ সত্যিই সত্যি? যতদূর আমি বলতে পারি এটি ইএলএফ লাইব্রেরিগুলির সাথে বেশ ভাল কাজ করে। এবং এটি এখনও ব্যবহৃত হয়, ld.so ldconfig দ্বারা নির্মিত ক্যাশে নির্ভর করে।
দীর্ঘমেয়াদী

লিনাক্সের লোকেরা ELF সমর্থন করার জন্য পুরানো সান লিঙ্কারের উত্স-কোড হ্যাক করেছে। সূর্য থেকে নতুন ELF বাস্তবায়ন মুছে ldconfigযেমন AT & T সঙ্গে একটি চুক্তি হিসেবে linker ক্যাশে খুব ত্রুটি ব্যাপারে অনুভূতিশীল ছিলেন। সূর্যের পরে যোগ the tree stooges: moe, lariএবং crleELF পরিচালনার জন্য সাহায্যকারী প্রোগ্রাম হিসাবে।
schily

2

:এলডি_লিবিআরএইপিএটিএইচ সহ বিশ্বব্যাপী বিকল্প (স্থান)

/sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH)

2

আপনি জিসিসি দিয়ে একটি সাধারণ পরীক্ষা প্রোগ্রাম সংকলন করতে পারেন এবং আপনার লাইব্রেরিতে লিঙ্ক করতে পারেন। তারপরে আপনি ldd সহ ব্যবহৃত গ্রন্থাগারগুলি পরীক্ষা করতে পারেন। আমি এই জাতীয় কিছু ব্যবহার:

echo "int main(){}" | gcc -x c++ -Wl,--no-as-needed -lmylib - && ldd a.out | grep mylib

-Wl,--no-as-needed লিঙ্কারটিকে লাইব্রেরিটি বাতিল করতে বাধা দেয় কারণ গ্রন্থাগার থেকে কোনও চিহ্ন ব্যবহার করা হয়নি।

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