আমি যখন এমন একটি প্রক্রিয়া চালিত করি যা রানটাইমের সময় একটি ভাগ করা লাইব্রেরির সাথে লিঙ্ক হয় (প্রক্রিয়া শুরু হওয়ার সাথে সংযুক্ত হয়, পরে সংযুক্ত হয় না dlload()
), সেখানে ভাগ করা লাইব্রেরি ( .so
) ফাইলটি ছাড়া আর LD_LIBRARY_PATH
কোথায় সন্ধান করা হবে ?
পটভূমি:
আমার কাছে কিছু সি ++ কোড রয়েছে যা আমি লিখেছিলাম যা একটি নির্দিষ্ট তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করে। আমি গ্রন্থাগারটি ইনস্টল করেছি এবং আমার কোড দুটি পৃথক প্ল্যাটফর্মগুলিতে উবুন্টু তবে বিভিন্ন সংস্করণ এবং জিসিসির বিভিন্ন সংস্করণে সংকলন করেছি। গ্রন্থাগারটি উত্স থেকে সংকলিত এবং ইনস্টল করা হয়েছিল এবং /usr/local/lib
উভয় প্ল্যাটফর্মে অবস্থিত । আমি যখন আমার কোডটি সংকলন করি তখন আমি pkg-config --libs
তৃতীয় পক্ষের লাইব্রেরির পরামিতিগুলির সাথে লিঙ্ক করি এবং আমি যাচাই করেছি যা pkg-config --libs
উভয় প্ল্যাটফর্মে ঠিক একই জিনিসটি দেয়।
আমার কোড উভয় প্ল্যাটফর্মে সফলভাবে সংকলন করেছে এবং উভয় প্ল্যাটফর্মগুলিতে LD_LIBRARY_PATH
সংজ্ঞায়িত (বা খালি হিসাবে সংজ্ঞায়িত ""
) নয়। যাইহোক, আমি যখন এটি একটি প্লাটোফর্মে চালাই তবে এটি সূক্ষ্মভাবে কাজ করে এবং অন্যদিকে আমি এই ত্রুটিটি পাই:
error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
আনন্দের সাথে যথেষ্ট, যেগুলি কাজ করে না তা হ'ল উবুন্টু এবং জিসিসির নতুন সংস্করণ। : /
সুতরাং আমি কীভাবে কর্মরত ব্যক্তিটি গ্রন্থাগারটি সনাক্ত করতে সক্ষম তা বুঝতে চেষ্টা করছি, যাতে আমি ভাঙাটিকে একইভাবে লাইব্রেরিটি সনাক্ত করতে পারি। (অর্থাত্, সেট না করে LD_LIBRARY_PATH
)
হালনাগাদ:
এখানে থেকে আমার আউটপুট cat /etc/ld.so.conf.d/*
... ওয়ার্কিং (পুরানো) সিস্টেমে:
/usr/lib/mesa
/usr/lib32/mesa
/usr/lib/alsa-lib
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
... ভাঙা (আরও নতুন) সিস্টেমে:
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/mesa
/usr/local/lib/libthrift-0.9.0.so
কিন্তু এখনও এটি ভুল দেয় error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
... সেখানে কোন কারণে এটা হবে কি না থেকে একটি ডিরেক্টরি কুড়ান /etc/ld.so.conf.d/*.conf
?
sudo ldconfig -v
নীচে প্রস্তাবিত হিসাবে চালানোর চেষ্টা করুন । যদি এটি এখনও কাজ না করে তবে আপনার প্রশ্নটির আউটপুট নিয়ে আপডেট করুন ldd /path/to/your/application
।
/etc/ld.so.conf.d/*.conf
তবে আমি এটি সম্পর্কে নিশ্চিত নই।