লিনাক্সে ভাগ করা গ্রন্থাগারগুলি বোঝা


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

উদাহরণস্বরূপ, আপনি যদি এমন একটি অ্যাপ্লিকেশন তৈরি করছেন যা গণিত ক্রিয়াকলাপ সম্পাদন করা প্রয়োজন, আপনি তার জন্য একটি নতুন গণিত ফাংশন তৈরি করতে হবে না, আপনি কেবল সেই প্রোগ্রামিং ভাষার জন্য লাইব্রেরিতে বিদ্যমান ফাংশনগুলি ব্যবহার করতে পারেন।

লিনাক্সের লাইব্রেরির উদাহরণগুলির মধ্যে রয়েছে libc (স্ট্যান্ডার্ড সি লাইব্রেরি) বা গিলিবিসি (স্ট্যান্ডার্ড সি লাইব্রেরির GNU সংস্করণ), libcurl (মাল্টিপ্রোটোকল ফাইল ট্রান্সফার লাইব্রেরি), libcrypt (সিটিতে এনক্রিপশন, হ্যাশিং এবং এনকোডিংয়ের জন্য ব্যবহৃত লাইব্রেরি) এবং আরও অনেক কিছু include ।

লিনাক্স দুটি শ্রেণীর লাইব্রেরি সমর্থন করে, যথা:

  • স্ট্যাটিক লাইব্রেরিগুলি - সংকলনের সময় স্থিরভাবে একটি প্রোগ্রামের সাথে আবদ্ধ।
  • ডায়নামিক বা ভাগ করা লাইব্রেরি - লোড হয় যখন কোনও প্রোগ্রাম চালু হয় এবং মেমরিতে লোড হয় এবং চালনার সময় বাঁধাই হয়

গতিশীল বা ভাগ করা লাইব্রেরিগুলিতে আরও শ্রেণিবদ্ধ করা যেতে পারে:

  • ডায়নামিকভাবে সংযুক্ত লাইব্রেরিগুলি - এখানে একটি প্রোগ্রাম ভাগ করা লাইব্রেরির সাথে যুক্ত করা হয় এবং কার্নেলটি প্রয়োগের পরে লাইব্রেরিটি (এটি স্মৃতিতে না থাকলে) লোড করে
  • গতিযুক্ত লোড করা লাইব্রেরিগুলি - প্রোগ্রামটি লাইব্রেরির সাথে ফাংশনগুলিতে কল করে পুরো নিয়ন্ত্রণ নেয় takes

ভাগ করা লাইব্রেরিগুলির দুটি নাম দেওয়া হয়েছে: লাইব্রেরির নাম (a.k.a Soname) এবং একটি "ফাইলনাম" (লাইব্রেরির কোড সংরক্ষণ করে এমন ফাইলের নিখুঁত পথ)।

উদাহরণস্বরূপ, libc এর সোনামটি হল libc.so.6: যেখানে lib উপসর্গ হয়, c একটি বর্ণনামূলক নাম, সুতরাং এর অর্থ ভাগ করা অবজেক্ট এবং। সংস্করণ। এবং এর ফাইলের নাম: /lib64/libc.so.6। মনে রাখবেন যে সোনামটি আসলে ফাইলের নামের একটি প্রতীকী লিঙ্ক।

ভাগ করা লাইব্রেরি ld.so (বা ld.so.x) এবং ld-linux.so (বা ld-linux.so.x) প্রোগ্রাম দ্বারা লোড করা হয়, যেখানে এক্স সংস্করণ। লিনাক্সে, /lib/ld-linux.so.x কোনও প্রোগ্রাম দ্বারা ব্যবহৃত সমস্ত ভাগ করা লাইব্রেরি অনুসন্ধান করে এবং লোড করে।

একটি প্রোগ্রাম তার লাইব্রেরির নাম বা ফাইলের নাম ব্যবহার করে একটি লাইব্রেরি কল করতে পারে এবং লাইব্রেরির পাথ ডিরেক্টরিগুলি সঞ্চয় করে যেখানে ফাইল সিস্টেমে লাইব্রেরি পাওয়া যায়। ডিফল্টরূপে, লাইব্রেরিগুলি/usr/স্থানীয়/lib,/usr/স্থানীয়/lib64,/usr/lib এবং/usr/lib64 এ অবস্থিত; সিস্টেম স্টার্টআপ লাইব্রেরিগুলি/lib এবং/lib64 এ রয়েছে। প্রোগ্রামাররা তবে কাস্টম অবস্থানে লাইব্রেরি ইনস্টল করতে পারে।

লাইব্রেরির পাথটি /etc/ld.so.conf ফাইলে সংজ্ঞায়িত করা যেতে পারে যা আপনি একটি কমান্ড লাইন সম্পাদক দিয়ে সম্পাদনা করতে পারেন।

# vi /etc/ld.so.conf 

এই ফাইলের লাইন (গুলি) কার্নেলকে /etc/ld.so.conf.d এ ফাইল লোড করার নির্দেশ দেয়। এইভাবে, প্যাকেজ রক্ষণাবেক্ষণকারী বা প্রোগ্রামাররা তাদের কাস্টম লাইব্রেরি ডিরেক্টরিগুলি অনুসন্ধান তালিকায় যুক্ত করতে পারে।

আপনি যদি /etc/ld.so.conf.d ডিরেক্টরিটি সন্ধান করেন তবে আপনি কিছু সাধারণ প্যাকেজগুলির জন্য কর্নফ, ফাইলগুলি দেখতে পাবেন (এই ক্ষেত্রে কার্নেল, মাইএসকিএল এবং পোস্টগ্রিস্কিল):

# ls /etc/ld.so.conf.d

kernel-2.6.32-358.18.1.el6.x86_64.conf  kernel-2.6.32-696.1.1.el6.x86_64.conf  mariadb-x86_64.conf
kernel-2.6.32-642.6.2.el6.x86_64.conf   kernel-2.6.32-696.6.3.el6.x86_64.conf  postgresql-pgdg-libs.conf

আপনি যদি মারিয়াডবি-x86_64.conf দেখুন, আপনি প্যাকেজের লাইব্রেরিগুলির জন্য একটি পরম পথ দেখতে পাবেন।

# cat mariadb-x86_64.conf

/usr/lib64/mysql

উপরের পদ্ধতিটি স্থায়ীভাবে লাইব্রেরির পথ নির্ধারণ করে। এটি অস্থায়ীভাবে সেট করতে, কমান্ড লাইনে LD_LIBRARY_PATH এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করুন। যদি আপনি এই পরিবর্তনগুলি স্থায়ী রাখতে চান তবে শেল ইনিশিয়ালাইজেশন ফাইল/ইত্যাদি/প্রোফাইল (গ্লোবাল) অথবা ~ /। প্রোফাইল (ব্যবহারকারী নির্দিষ্ট) এ এই লাইনটি যুক্ত করুন।

# export LD_LIBRARY_PATH=/path/to/library/file

আসুন এখন কীভাবে ভাগ করা লাইব্রেরিগুলি ব্যবহার করবেন সেদিকে নজর দিন look বাইনারি ফাইলের জন্য সমস্ত ভাগ করা লাইব্রেরি নির্ভরতার তালিকা পেতে, আপনি ldd ইউটিলিটিটি ব্যবহার করতে পারেন। এলডিডি আউটপুট ফর্ম হয়:

library name =>  filename (some hexadecimal value)
OR
filename (some hexadecimal value)  #this is shown when library name can’t be read

এই কমান্ডটি ls কমান্ডের জন্য সমস্ত ভাগ করা লাইব্রেরি নির্ভরতা দেখায়।

# ldd /usr/bin/ls
OR
# ldd /bin/ls
	linux-vdso.so.1 =>  (0x00007ffebf9c2000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003b71e00000)
	librt.so.1 => /lib64/librt.so.1 (0x0000003b71600000)
	libcap.so.2 => /lib64/libcap.so.2 (0x0000003b76a00000)
	libacl.so.1 => /lib64/libacl.so.1 (0x0000003b75e00000)
	libc.so.6 => /lib64/libc.so.6 (0x0000003b70600000)
	libdl.so.2 => /lib64/libdl.so.2 (0x0000003b70a00000)
	/lib64/ld-linux-x86-64.so.2 (0x0000561abfc09000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003b70e00000)
	libattr.so.1 => /lib64/libattr.so.1 (0x0000003b75600000)

যেহেতু ভাগ করা লাইব্রেরিগুলি বিভিন্ন ডিরেক্টরিতে উপস্থিত থাকতে পারে, একটি প্রোগ্রাম চালু করার সময় এই সমস্ত ডিরেক্টরিতে সন্ধান করা প্রচুর অদক্ষ হতে পারে: যা গতিশীল লাইব্রেরির সম্ভাব্য অসুবিধাগুলির মধ্যে একটি। সুতরাং ক্যাশে ব্যবস্থাপনার একটি কর্মসূচি, একটি প্রোগ্রাম দ্বারা সঞ্চালিত ldconfig।

ডিফল্টরূপে, ldconfig /etc/ld.so.conf এর বিষয়বস্তু পড়ে, ডায়নামিক লিঙ্ক ডিরেক্টরিগুলিতে উপযুক্ত প্রতীকী লিঙ্কগুলি তৈরি করে এবং তারপরে /etc/ld.so.cache এ একটি ক্যাশে লিখে দেয় যা অন্য প্রোগ্রামগুলির দ্বারা সহজেই ব্যবহৃত হয় ।

এটি খুব গুরুত্বপূর্ণ বিশেষত যখন আপনি সবেমাত্র নতুন ভাগ করা গ্রন্থাগার ইনস্টল করেছেন বা নিজের তৈরি করেছেন বা নতুন লাইব্রেরি ডিরেক্টরি তৈরি করেছেন। পরিবর্তনগুলি কার্যকর করতে আপনার ldconfig কমান্ড চালানো দরকার।

# ldconfig
OR
# ldconfig -v 	#shows files and directories it works with

আপনার ভাগ করা লাইব্রেরি তৈরির পরে, আপনাকে এটি ইনস্টল করা দরকার। আপনি এটি উল্লিখিত মানক ডিরেক্টরিগুলির মধ্যে যে কোনওটিকে সরাতে পারেন, এবং ldconfig কমান্ড চালাতে পারেন।

বিকল্পভাবে, সোনাম থেকে ফাইলের নাম পর্যন্ত প্রতীকী লিঙ্কগুলি তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:

# ldconfig -n /path/to/your/shared/libraries

আপনার নিজের লাইব্রেরি তৈরির সাথে শুরু করতে, লিনাক্স ডকুমেন্টেশন প্রজেক্ট (টিএলডিপি) থেকে এই গাইডটি দেখুন।

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