/ Usr / স্থানীয় / lib এ ভাগ করা লাইব্রেরি ব্যবহার করুন


58

আমি উত্স থেকে কিছু গ্রন্থাগার তৈরি করেছি, এবং পরে ফাইলগুলি make installআছে/usr/local/lib

উদাহরণস্বরূপ, আমার ক্ষেত্রে আমার কাছে ফাইল রয়েছে libodb-2.2.soযা এই ডিরেক্টরিতে রয়েছে।

তবে আমি যখন এক্সিকিউটেবলের সাথে সংযুক্ত libodbহয়েছি তখন আমি ত্রুটিটি পেয়েছি: ভাগ করা লাইব্রেরিগুলি লোড করার সময় ত্রুটি:libodb-2.2.so: cannont open shared object file: No such file or directory.

এর অর্থ কি এই যে আমি আমার নির্বাহযোগ্যটি সঠিকভাবে তৈরি না করে তৈরি করেছি? বা আমি কি সিস্টেমটিকে নির্দেশ করব যে ফোল্ডারে কিছু আকর্ষণীয় লিবসও থাকতে পারে /usr/local/lib?

আমি উবুন্টু 12.04, লিনাক্স কার্নেল 3.2.0-38-জেনেরিক ব্যবহার করছি।



আমি আপনাকে দৃ deb়ভাবে পরামর্শ দিচ্ছি যে আপনি আপনার ডিবাগারের সাথে ভাল বন্ধুত্বের সম্পর্ক তৈরি করুন
ডিডিএস

@ ডিডিএস আমি আপনাকে আরও কিছুটা বিস্তৃত করার পরামর্শ দিচ্ছি। আপনি জানেন যে এটি এখানে একটি সহযোগী সাইট। দয়া করে, নির্দেশ করুন উপায়টি যে gdbকোনও উপায়ে যে কোনও উপায়ে সহায়তা করেছিল link, উদাহরণস্বরূপ। আমি সত্যই কৌতূহলী। প্রথমে আপনার মন্তব্যটি আমার কাছে সমস্যার সাথে সম্পর্কিত নয় বলে মনে হচ্ছে । তবে আমি ভুল হতে পারি। সত্যই আমি যথেষ্ট জানি না gdb, এবং গ্রন্থাগার লোড।
স্টিফেন রোল্যান্ড

দুঃখিত ... এই মন্তব্যটি সি প্রোগ্রামিং সম্পর্কে কোনও শিক্ষার্থীর প্রশ্নের উপর স্ট্যাকওভারফ্লোতে রাখা উচিত ছিল ... সবেমাত্র ইউ-এল
ডিডিএস-তে

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

উত্তর:


58

বর্তমান অধিবেশন জন্য আপনি পারেন

LD_LIBRARY_PATH = / lib: / usr / lib: / usr / স্থানীয় / lib রফতানি করুন

বা পরিবর্তন স্থায়ী করতে আপনি যোগ করতে পারেন /usr/local/libথেকে /etc/ld.so.conf(অথবা কিছু এটা অন্তর্ভুক্ত) এবং চালানোর ldconfigরুট হিসাবে।

যদি আপনার এখনও সমস্যা হয় তবে দৌড়ানো ldd [executable name]আপনাকে যে লাইব্রেরিগুলি সন্ধান করার চেষ্টা করছে তা দেখায় এবং কোনটি খুঁজে পাওয়া যায় না।


3
থেকে manজন্য পৃষ্ঠা ldd(1)"স্বাভাবিক ক্ষেত্রে, ldd মান গতিশীল linker (দেখুন ডাকে ld.so(8)সঙ্গে) LD_TRACE_LOADED_OBJECTSএনভায়রনমেন্ট ভেরিয়েবল সেট 1, যা গ্রন্থাগার নির্ভরতা প্রদর্শন করে linker ঘটায়। সচেতন হও, তবে, যে কিছু কিছু ক্ষেত্রে, কিছু সংস্করণ lddমে প্রোগ্রামটি সরাসরি সম্পাদন করে নির্ভরতা সম্পর্কিত তথ্য অর্জনের চেষ্টা করুন। সুতরাং, আপনার কখনই অবিশ্বস্ত এক্সিকিউটেবলেরldd উপর নিয়োগ করা উচিত নয় , কারণ এটি স্বেচ্ছাচারিত কোড কার্যকর করতে পারে
unt

4
"... $ objdump -p /path/to/program | grep NEEDED"
স্লাইসভেন

খুব সুন্দর - আমি এর আগে কখনও কখনও এসেছি না।
ফ্লপ করুন

অনুযায়ী এই নিবন্ধটি এই উত্তর canonically হয় ভুল এবং ক্ষতিকর । একটি সঠিক পদ্ধতির জন্য -Lএবং -rpathসংকলনের সময় গ্রন্থাগারগুলির জন্য লিঙ্কিং অনুসন্ধানের পথ এবং রানটাইম অনুসন্ধানের পথ নির্ধারণের জন্য সঠিকভাবে সঠিক প্রশ্ন , এই প্রশ্নোত্তর অনুসারে।
ক্লিফ আর্মস্ট্রং

37

আপনি যদি ইতিমধ্যে ldconfigগ্রন্থাগারটি তৈরির পরে চালিয়ে যান তবে পড়া চালিয়ে যান। যদি তা না হয় তবে প্রথমে ldconfig পড়ুন

/usr/local/libldconfig যে লাইব্রেরি পাথ ব্যবহার করে তা নাও থাকতে পারে। আপনি কেবল এটি করতে পারেন:

ldconfig /usr/local/lib

এবং স্টাফটি লিংকার ক্যাশে যুক্ত করা উচিত তবে সঠিকভাবে পথটি যুক্ত করা আরও ভাল। আপনার একটি /etc/ld.so.conf.dডিরেক্টরি আছে তা নিশ্চিত করুন । যদি তাই কোনও ফাইল যুক্ত করুন (এটিকে "usr-local.conf" বা যাই হোক না কেন) কল করুন এবং এতে একটি লাইন দিন:

/usr/local/lib

এখন চালান ldconfig। আপনার যদি ld.so.conf.d ডিরেক্টরি না থাকে তবে আপনার কাছে একটি /etc/ld.so.conf ফাইল থাকা উচিত এবং আপনি সেই লাইনটি এর শেষে যুক্ত করতে পারেন।


3
আমি /etc/ld.so.conf.dএটিকে আমলে নেওয়ার জন্য ldconfig sudoed এ একটি কাস্টম.কনফ ফাইল যুক্ত করেছি এবং আমার এক্সিকিউটেবলটি এখনই শুরু করতে পারে।
স্টিফেন রোল্যান্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.