LD_LIBRARY_PATH বনাম LIBRARY_PATH


159

আমি একটি সাধারণ সি ++ প্রোগ্রাম তৈরি করছি এবং আমি বিকাশ এবং পরীক্ষার জন্য সাম্প্রতিকভাবে একটি সিস্টেম সরবরাহিত ভাগ করা লাইব্রেরিটির আরও সাম্প্রতিক সংস্করণটি প্রতিস্থাপন করতে চাই।

আমি LD_LIBRARY_PATH ভেরিয়েবল সেট করার চেষ্টা করেছি তবে লিঙ্কার (এলডি) এর সাথে ব্যর্থ হয়েছে:

/ usr / bin / ld: -lyaml-cpp খুঁজে পাচ্ছে না

আমি আশা করি এটি কাজ করবে কারণ এলডি ম্যান পৃষ্ঠা অনুসারে:

লিঙ্কারটি প্রয়োজনীয় ভাগ করা লাইব্রেরিগুলি সনাক্ত করতে নিম্নলিখিত অনুসন্ধানের পথগুলি ব্যবহার করে: ... একটি স্থানীয় লিঙ্কারের জন্য, পরিবেশের পরিবর্তনশীল "LD_LIBRARY_PATH" এর বিষয়বস্তু ...

আমি তখন LIBRARY_PATH সেট করার চেষ্টা করেছি এবং এটি কাজ করেছে।

জিসিসির ম্যানুয়াল অনুসারে:

LIBRARY_PATH এর মান হ'ল PATH এর মতো ডিরেক্টরিগুলির একটি কোলন-বিচ্ছিন্ন তালিকা। নেটিভ সংকলক হিসাবে কনফিগার করা অবস্থায়, জিসিসি বিশেষ লিঙ্কার ফাইলগুলির সন্ধান করার জন্য নির্দিষ্টভাবে নির্দেশিত ডিরেক্টরিগুলি চেষ্টা করে, যদি এটি জিসিসি_এএসইসিপিআরএফআইএক্স ব্যবহার করে এটি খুঁজে না পায়। -L বিকল্পের জন্য সাধারণ লাইব্রেরিগুলি অনুসন্ধান করার সময় জিসিসি ব্যবহার করে লিঙ্কিং এই ডিরেক্টরিগুলিও ব্যবহার করে (তবে -L এর সাথে নির্দিষ্ট ডিরেক্টরিগুলি আগে আসে)।

(জিসিসি) ম্যানুয়ালটি যেমন পরামর্শ দেয়, LIBRARY_PATH কাজ করে কারণ আমি জিসিসির সাথে লিঙ্ক করেছি।

কিন্তু ..

  • যেহেতু আমি জিসিসির সাথে লিঙ্ক করব কেন ত্রুটি বার্তার পরামর্শ অনুসারে এলডি বলা হচ্ছে?
  • একই উদ্দেশ্যে দুটি ভেরিয়েবল থাকার বিন্দু কী? অন্য কোন পার্থক্য আছে?

উত্তর:


213

LIBRARY_PATH আপনার প্রোগ্রামের সাথে সংযুক্ত হওয়া দরকার স্ট্যাটিক এবং ভাগ করা লাইব্রেরি ধারণকারী ডিরেক্টরি অনুসন্ধান করতে সংকলনের আগে জিসিসি দ্বারা ব্যবহৃত হয়।

LD_LIBRARY_PATHআপনার প্রোগ্রামটি ভাগ করে নেওয়া লাইব্রেরিগুলি সহ সফলভাবে সংকলন ও লিঙ্ক হওয়ার পরে অনুসন্ধানের জন্য ব্যবহৃত হয় ।

সম্পাদনা: নীচের দিকে নির্দেশিত অনুসারে, আপনার গ্রন্থাগারগুলি স্থির বা ভাগ করা যেতে পারে। যদি এটি স্থিতিশীল হয় তবে কোডটি আপনার প্রোগ্রামটিতে অনুলিপি করা হয়েছে এবং আপনার প্রোগ্রামটি সংকলিত ও সংযুক্ত হওয়ার পরে আপনার লাইব্রেরিটি অনুসন্ধান করার দরকার নেই। যদি আপনার লাইব্রেরিটি ভাগ করা থাকে তবে তা আপনার প্রোগ্রামের সাথে ডায়নামিকভাবে সংযুক্ত হওয়া দরকার এবং এটি তখনই কার্যকর LD_LIBRARY_PATHহয়।


14
এবং অবশ্যই এলডি_লিবিআরএইপিএটিএইচটি কেবল গতিশীল লাইব্রেরি দিয়েই বোঝায়
অ্যালেক্স জেসমিন

2
আমার বক্তব্যটি হ'ল যদি আমি লিডিংয়ের জন্য এলডি ব্যবহার করি (সরাসরি), তবে, এলডি ম্যানুয়াল অনুসারে, এলডি_লিবিআরএআইপিএটিএইচটি লাইব্রেরিগুলি সহ যে ডিরেক্টরিগুলি আমার প্রোগ্রামের সাথে যুক্ত করতে হবে তা অনুসন্ধান করতে ব্যবহৃত হত। আমি অবশ্যই এখানে কিছু মিস করছি ..
জর্জিওস পলিটাইটিস

2
আপনি নিজেই ld চালিত না করা এবং অবজেক্ট ফাইলগুলি লাইব্রেরির সাথে একত্রিত না করলে এটি জিসিসি যে পথে চলে তা 'উত্তরাধিকারী' হবে। আপনি -xlinker বিকল্পগুলি সহ স্ট্যান্ডার্ড জিসিসি ওভাররাইড করতে পারেন।
নতুন

5
প্রকৃতপক্ষে, কেবল স্থির লাইব্রেরির পরিবর্তে LIBRARY_PATH স্থিতিশীল এবং গতিশীল লাইব্রেরি ধারণকারী ডিরেক্টরিগুলি অনুসন্ধানের জন্য ব্যবহৃত হয় ।
কণা

3
হ্যাঁ এটা ভুল - পার্থক্য যে LIBRARY_PATHলাইব্রেরি (স্ট্যাটিক বা গতিশীল) জন্য অনুসন্ধান করা হয় সময় সঙ্কলন এবং LD_LIBRARY_PATHরান টাইম এ গতিশীল লাইব্রেরির জন্য অনুসন্ধান করা হয়। অবশ্যই রান সময়ে আপনার স্ট্যাটিক লাইব্রেরিগুলি অনুসন্ধান করার দরকার নেই।
টিম্ম্ম্ম

47

LD_LIBRARY_PATHপ্রোগ্রামটি শুরু হওয়ার পরে LIBRARY_PATHঅনুসন্ধান করা হয়, লিঙ্কের সময় অনুসন্ধান করা হয়।

মন্তব্য থেকে সাবধান :


38
দ্রষ্টব্য: লাইব্রেরিগুলিতে লিঙ্ক করার সময়, ldনিজেই হয় LIBRARY_PATHবা হয় না গ্রন্থাগারগুলির সন্ধান করে LD_LIBRARY_PATH। এটা শুধুমাত্র যখন gccপূজা ldকরে LIBRARY_PATHহয়ে ব্যবহৃত। (এটি কঠিন পদ্ধতিতে শিখেছি))
রাফলেউইন্ড

1
@ রুফলউইন্ড আকর্ষণীয়, তবে আপনি যদি কোনও রেফারেন্স দিয়ে থাকেন তবে আরও বেশি কিছু হত।
hmijail

লাইব্রেরিগুলি অনুসন্ধানের সময় (লিঙ্ক টাইম বনাম রান টাইম) এই মুহুর্তে এই দৃষ্টিভঙ্গিটি আলাদা করে তোলে যখন @ নবীন যে ধরণের লাইব্রেরি অনুসন্ধান করেছেন (স্ট্যাটিক ভি ডায়নামিক) তার মধ্যে একটি পার্থক্য তৈরি করে। কার্যকরভাবে অভিন্ন হিসাবে দুটি মতামত রয়েছে (গতিশীল: রান সময় = স্থির: লিংক সময়) বা যখন এই চিঠিপত্রটি ধারণ করে না তখন কোনও গুরুত্বপূর্ণ পরিস্থিতি রয়েছে? আমি অনুমান করব যে গতিশীল গ্রন্থাগারগুলি সম্পর্কে কিছু জ্ঞানের প্রয়োজন সংকলনের সময়ও প্রয়োজন।
জ্যাভিয়ারস্টুউ

13

যেহেতু আমি জিসিসির সাথে লিঙ্ক করব কেন ত্রুটি বার্তার পরামর্শ অনুসারে এলডি বলা হচ্ছে?

জিসিসি লিংক মোডে থাকা অবস্থায় অভ্যন্তরীণভাবে এলডি কল করে।

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