আপনার নতুন লাইব্রেরিটি যেখানে পাথ যুক্ত করুন LD_LIBRARY_PATH
(ম্যাকের এটির কিছুটা আলাদা নাম আছে ...)
আপনার -L/my/dir -lfoo
সলিউশনটি বিকল্পগুলি ব্যবহার করে কাজ করা উচিত , রানটাইমের সময় আপনার লাইব্রেরির অবস্থানের দিকে নির্দেশ করতে LD_LIBRARY_PATH ব্যবহার করুন।
LD_LIBRARY_PATH ব্যবহার করে যত্নশীল - সংক্ষেপে (লিঙ্ক থেকে):
.. প্রভাবগুলি ..:
সুরক্ষা : মনে রাখবেন যে এলডি_লিবিআরআরএআইপিএটিএলে উল্লিখিত ডিরেক্টরিগুলি স্ট্যান্ডার্ড লোকেশনের আগে অনুসন্ধান করা হবে! এইভাবে, কোনও দুষ্টু ব্যক্তি কোনও ভাগ করা লাইব্রেরির একটি সংস্করণ যাতে দূষিত কোড রয়েছে তা লোড করতে আপনার অ্যাপ্লিকেশনটি পেতে পারে! সেটুইড / সেটজিড এক্সিকিউটেবলগুলি সেই পরিবর্তনশীলটিকে অবহেলা করার এক কারণ!
কর্মক্ষমতা: লিংক লোডারকে উল্লিখিত সমস্ত ডিরেক্টরি সন্ধান করতে হবে, যতক্ষণ না এটি ভাগ করা লাইব্রেরি যেখানে থাকে সেই ডিরেক্টরিটি খুঁজে না পায় - সমস্ত ভাগ করা লাইব্রেরির জন্য অ্যাপ্লিকেশনটির সাথে লিঙ্কযুক্ত! এর অর্থ প্রচুর সিস্টেম কল () খোলার জন্য, এটি "ENOENT (এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই)" দিয়ে ব্যর্থ হবে! যদি पथটিতে অনেকগুলি ডিরেক্টরি থাকে তবে ব্যর্থ কলগুলির সংখ্যা রৈখিকভাবে বৃদ্ধি পাবে এবং আপনি এটি অ্যাপ্লিকেশনটির শুরু হওয়ার সময় থেকেই বলতে পারেন। ডিরেক্টরিগুলির কিছু (বা সমস্ত) যদি কোনও এনএফএস পরিবেশে থাকে তবে আপনার অ্যাপ্লিকেশনগুলির প্রারম্ভকালীন সময়টি সত্যই দীর্ঘতর হতে পারে - এবং এটি পুরো সিস্টেমকে ধীর করে দিতে পারে!
অসঙ্গতি: এটি সবচেয়ে সাধারণ সমস্যা। LD_LIBRARY_PATH কোনও অ্যাপ্লিকেশনকে একটি ভাগ করা লাইব্রেরি লোড করতে বাধ্য করে যা এর সাথে লিঙ্ক করা হয়নি এবং এটি সম্ভবত মূল সংস্করণের সাথে সামঞ্জস্যপূর্ণ নয়। এটি হয় খুব সুস্পষ্ট হতে পারে, যেমন অ্যাপ্লিকেশন ক্র্যাশ হয়ে যায়, বা এটি ভুল ফলাফল হতে পারে, যদি বাছাই করা লাইব্রেরিটি মূল সংস্করণটি যা করত তেমন না করে। বিশেষত পরেরটি কখনও কখনও ডিবাগ করা শক্ত।
বা
লিঙ্কারের জন্য জিসিসি-র মাধ্যমে আরপিথ বিকল্পটি ব্যবহার করুন - রানটাইম লাইব্রেরি অনুসন্ধানের পথটি স্ট্যান্ডার্ড দির (জিসিসি বিকল্প) সন্ধানের পরিবর্তে ব্যবহৃত হবে:
-Wl,-rpath,$(DEFAULT_LIB_INSTALL_PATH)
এটি একটি অস্থায়ী সমাধানের জন্য ভাল। লিঙ্কার প্রথমে স্ট্যান্ডার্ড ডিরেক্টরিগুলি অনুসন্ধান করার আগে লাইব্রেরির জন্য LD_LIBRARY_PATH অনুসন্ধান করে।
আপনি যদি স্থায়ীভাবে LD_LIBRARY_PATH আপডেট করতে না চান তবে আপনি ফ্লাই অন কমান্ড লাইনে এটি করতে পারেন:
LD_LIBRARY_PATH=/some/custom/dir ./fooo
লাইব্রেরি লিঙ্কার (উদাহরণ) ব্যবহার সম্পর্কে যা জানে তা আপনি পরীক্ষা করতে পারেন:
/sbin/ldconfig -p | grep libpthread
libpthread.so.0 (libc6, OS ABI: Linux 2.6.4) => /lib/libpthread.so.0
এবং আপনার অ্যাপ্লিকেশনটি কোন লাইব্রেরি ব্যবহার করছে তা পরীক্ষা করতে পারেন:
ldd foo
linux-gate.so.1 => (0xffffe000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7f9e000)
libxml2.so.2 => /usr/lib/libxml2.so.2 (0xb7e6e000)
librt.so.1 => /lib/librt.so.1 (0xb7e65000)
libm.so.6 => /lib/libm.so.6 (0xb7d5b000)
libc.so.6 => /lib/libc.so.6 (0xb7c2e000)
/lib/ld-linux.so.2 (0xb7fc7000)
libdl.so.2 => /lib/libdl.so.2 (0xb7c2a000)
libz.so.1 => /lib/libz.so.1 (0xb7c18000)
libfoo.*
ফাইল বিদ্যমান এবং যেখানে -.so
W / O.0
,.a
ইত্যাদি ইত্যাদি?