লিনাক্স ডায়নামিক লিঙ্কারের "কোনও সংস্করণ তথ্য উপলব্ধ নেই" এর ত্রুটিটি কী বোঝায়?


91

আমাদের পণ্যটিতে আমরা কিছু লিনাক্স বাইনারি শিপ করি যা গতিশীলভাবে "লাইবপ্যাম" এর মতো সিস্টেম লাইব্রেরিতে লিঙ্ক করে। কিছু গ্রাহক সিস্টেমে স্ট্যাডারে আমরা নিম্নলিখিত ত্রুটিটি পাই যখন প্রোগ্রামটি চালিত হয়:

./authpam: /lib/libpam.so.0: no version information available (required by authpam)

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

আমি সনাক্ত করেছি যে এটির ত্রুটিটি ডায়নামিক লিঙ্কার থেকে আসে যখন সিস্টেম ইনস্টলড লাইব্রেরিতে আমাদের নির্বাহযোগ্য প্রত্যাশার কিছু অনুপস্থিত থাকে। গতিশীল সংযোগ প্রক্রিয়াটির অভ্যন্তরীণগুলি সম্পর্কে আমি বেশি কিছু জানি না ... এবং বিষয়টি গুগল করা খুব বেশি উপকার করে না। :(

এই ত্রুটির কারণ কী কেউ জানেন? ... আমি কীভাবে কারণটি সনাক্ত করতে পারি? ... এবং কীভাবে আমরা এই সমস্যাটি এড়াতে আমাদের এক্সিকিউটেবলগুলিকে পরিবর্তন করতে পারি?

আপডেট: গ্রাহকটি ডেবিয়ান "টেস্টিং" এর সর্বশেষতম সংস্করণে আপগ্রেড হয়েছে এবং একই ত্রুটি ঘটেছে। সুতরাং এটি পুরানো লাইবপ্যাম লাইব্রেরি নয়। আমার ধারণা আমি বুঝতে চাই যে লিঙ্কারটি কী অভিযোগ করছে? অন্তর্নিহিত কারণগুলি কীভাবে তদন্ত করতে পারি?

উত্তর:


65

"কোনও সংস্করণ তথ্য উপলভ্য নয়" এর অর্থ হ'ল লাইব্রেরির সংস্করণ নম্বরটি ভাগ করা অবজেক্টের চেয়ে কম। উদাহরণস্বরূপ, যদি আপনি মেইনারি তৈরি করেন এমন মেশিনে আপনার মেজর.মিনোর.প্যাচ নম্বরটি যদি 7.15.5 হয় এবং মেজর.মিনার.প্যাচটি ইনস্টলেশন মেশিনে 7.12.1 হয়, তবে এলডি সতর্কতাটি মুদ্রণ করবে।

আপনি আপনার লক্ষ্যযুক্ত ওএসের সাথে প্রেরিত ভাগ করা অবজেক্ট সংস্করণটির সাথে মেলে এমন একটি লাইব্রেরি (শিরোনাম এবং ভাগ করা বস্তু) দিয়ে সংকলন করে এটি ঠিক করতে পারেন। উদাহরণস্বরূপ, আপনি যদি রেডহ্যাট 3.4.6-9 এ ইনস্টল করতে চলেছেন তবে আপনি দেবিয়ান 4.1.1-21 তে সংকলন করতে চান না। এটি বেশিরভাগ বিতরণে নির্দিষ্ট লিনাক্স ডিস্ট্রো সংখ্যার জন্য পাঠানো হয় reasons

অন্যথায়, আপনি স্থিরভাবে লিঙ্ক করতে পারেন। তবে আপনি এটি প্যামের মতো কিছু করতে চান না, তাই আপনি আসলে এমন একটি বায়বীয় পরিবেশ ইনস্টল করতে চান যা আপনার ক্লায়েন্টের উত্পাদন পরিবেশের সাথে মেলে (বা কমপক্ষে ইনস্টল করে সঠিক লাইব্রেরির সংস্করণগুলির সাথে লিঙ্ক করুন))

শেয়ার্ড অবজেক্ট লাইব্রেরিগুলি যখন সংস্করণযুক্ত চিহ্ন ব্যবহার না করে এমন সময় থেকে আপনি .so ফাইলগুলির নাম পরিবর্তন করতে (ভার্সন নম্বর দিয়ে প্যাডিং করতে পারেন) Adv সুতরাং আশা করবেন না যে .so.nnn নামকরণ প্রকল্পের সাথে খেলতে সাহায্য হচ্ছে (অনেক কিছু - এটি আপনার সিস্টেমে ট্র্যাশ হয়ে গেছে তবে এটি সাহায্য করতে পারে))

আপনার শেষ বিকল্পটি একটি কাস্টম লিঙ্কিং স্ক্রিপ্ট ব্যবহার করে একটি ভিন্ন গৌণ সংস্করণ নম্বর সহ একটি লাইব্রেরির সাথে সংকলন করবে: http://www.redhat.com/docs/manouts/enterprise/RHEL-4- ম্যানুয়াল /gnu-linker/ scriptts। এইচটিএমএল

এটি করার জন্য, আপনাকে একটি কাস্টম স্ক্রিপ্ট লিখতে হবে এবং আপনার একটি কাস্টম ইনস্টলার দরকার যা কাস্টম স্ক্রিপ্টটি ব্যবহার করে আপনার ক্লায়েন্টের ভাগ করা অবজেক্টগুলির বিরুদ্ধে এলডি চালায়। এটির জন্য আপনার ক্লায়েন্টের তাদের উত্পাদন সিস্টেমে জিসিসি বা এলডি থাকা দরকার।


22

গ্লিবিসি ডায়নামিক লিংকার থেকে এই বার্তাটি আসলে যা বোঝায় তা হ'ল উল্লেখ করা লাইব্রেরির ( /lib/libpam.so.0আপনার ক্ষেত্রে) VERDEFইএলএফ বিভাগ নেই যখন বাইনারি ( authpamআপনার ক্ষেত্রে) VERNEEDএই লাইব্রেরির বিভাগটির কিছু সংস্করণ সংজ্ঞা রয়েছে (সম্ভবত, libpam.so.0)। আপনি সহজেই সঙ্গে এটি দেখতে পারেন readelf, শুধু তাকান .gnu.version_dএবং .gnu.version_rবিভাগে (অথবা তার অভাব)।

সুতরাং এটি একটি প্রতীক সংস্করণ মেলেনি, না যদি বাইনারি মাধ্যমে কিছু নির্দিষ্ট সংস্করণটিতে পেতে চেয়েছিলেন কারণ VERNEEDও লাইব্রেরি তার প্রকৃত এটা প্রদান না VERDEF(, যে একটি কঠিন linker ভুল হবে ও বাইনারি এ সব চালানো হবে না মত এই এই বা যে তুলনায় )। এটি হ'ল বাইনারি কিছু সংস্করণ চায় তবে গ্রন্থাগারটি এর সংস্করণগুলি সম্পর্কে কোনও তথ্য সরবরাহ করে না।

অনুশীলনে এর অর্থ কী? সাধারণত, এই উদাহরণে ঠিক যা দেখা যায় - কিছুই না, জিনিসগুলি কেবল সংস্করণকে উপেক্ষা করে কাজ করে। জিনিস ভাঙ্গতে পারে? অবশ্যই, হ্যাঁ, সুতরাং অন্যান্য উত্তরগুলি সঠিক যে বাইনারিগুলি নির্মাণের সময় সংযুক্ত ছিল সেগুলি রানটাইমের সময় একই লাইব্রেরি ব্যবহার করা উচিত in

আরও তথ্য আলরিচ ড্রেপার্স "ইএলএফ সিম্বল সংস্করণ " এ পাওয়া যেতে পারে ।


4
সংস্করণ বিভাগটি দেখতে আমি 'রিডফেল-ভি <এক্সপিথ>' চালানোর পরামর্শ দিচ্ছি। নোটিশের মূলধন ভি
রায় রায় রোডেড

আমি অনুমান করেছি যে এটি (সিস্টেমের নতুন সংস্করণ) লাইব্রেরিগুলির জন্য সতর্কতার কারণ ছিল যা আমি নিজেই তৈরি করি এবং একটি সমান্তরাল উপসর্গে ইনস্টল করি। আমি সবসময় ভেবেছিলাম কারণ এটি আমি এলএলভিএম সরঞ্জামচেন ব্যবহার করেছি, তবে আমি কেবল লক্ষ্য করেছি যে সিস্টেম জিসিসি দিয়ে বিল্ডিংটি সেই সংস্করণ ট্যাগগুলি স্বয়ংক্রিয়ভাবে লাইব্রেরিতে রাখে না। CFLAGS এবং / অথবা LDFLAGS এর মাধ্যমে আমার কি একটি বিকল্প যুক্ত করতে হবে?
আরজেভিবি

5

Fww, zenoss পর্যবেক্ষণ সিস্টেম ইনস্টল করা আছে এমন একটি সিস্টেমে চেক_এনআরপি চালানোর সময় আমার এই সমস্যা হয়েছিল। বিভ্রান্তি যোগ করতে, এটি রুট ব্যবহারকারী হিসাবে দুর্দান্ত কাজ করেছে তবে জেনোস ব্যবহারকারী হিসাবে নয়।

আমি জানতে পেরেছিলাম যে জেনোস ব্যবহারকারীর কাছে একটি এলডি_লিবিআরবিআইএপিএটিএইচ রয়েছে যা এটি জেনোস লাইব্রেরি ব্যবহার করতে বাধ্য করেছিল, যা এই সতর্কতাগুলি জারি করে। অর্থাৎ:

root@monitoring:$ echo $LD_LIBRARY_PATH

su - zenoss
zenoss@monitoring:/root$ echo $LD_LIBRARY_PATH
/usr/local/zenoss/python/lib:/usr/local/zenoss/mysql/lib:/usr/local/zenoss/zenoss/lib:/usr/local/zenoss/common/lib::
zenoss@monitoring:/root$ /usr/lib/nagios/plugins/check_nrpe -H 192.168.61.61 -p 6969 -c check_mq
/usr/lib/nagios/plugins/check_nrpe: /usr/local/zenoss/common/lib/libcrypto.so.0.9.8: no version information available (required by /usr/lib/libssl.so.0.9.8)
(...)
zenoss@monitoring:/root$ LD_LIBRARY_PATH= /usr/lib/nagios/plugins/check_nrpe -H 192.168.61.61 -p 6969 -c check_mq
(...)

যাইহোক, আমি যা বলার চেষ্টা করছি: আপনার ভেরিয়েবলগুলি যেমন এলডি_লিবিআরএআইপিএইচএইচটি, এলডিপ্রেলএড ইত্যাদিও পরীক্ষা করে দেখুন।


3

আপনি কীভাবে আপনার অ্যাপ সংকলন করছেন? কি সংকলক পতাকা?

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


1

আপনি কি এটি ইতিমধ্যে দেখেছেন ? কারণটি মনে হয় যে কোনও এক পক্ষে খুব পুরানো লিপপ্যাম, সম্ভবত সেই গ্রাহকের পক্ষে।

বা সংস্করণটির লিঙ্কগুলি অনুপস্থিত হতে পারে: http://www.linux.org/docs/ldp/howto/Program-Library-HOWTO/ Shared- libraries.html


আমি এটি খুঁজে পেয়েছি তবে এটি কারণটি বুঝতে আসলে সহায়তা করে নি। আমি মনে করি না এটি কোনও পুরানো প্যাম লাইব্রেরি, কোজ সর্বশেষতম ডিবিয়ান পরীক্ষায় আপডেট করেছে।

তাহলে হয়ত আপনি কোনও পুরানো মেশিনে সংকলন করছেন? :) আপনি কি ক্লায়েন্টের মেশিনে এটি সংকলন করার চেষ্টা করেছেন? nondot.org/sabre/Mirrored/libtool-2.1a/libtool_toc.html#TOC36
Vinko Vrsalovic
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.