সুস্পষ্ট উত্তরটি যদিও সর্বাধিক বিস্তৃত নয়, তা হ'ল আপনার প্যাকেজ পরিচালককে পরীক্ষা করা, যেমন
rpm -qi glibc
dpkg -l libc6
(দুঃখের বিষয়, গ্লিবসি-তে একটি পিকনফিগ .pc
ফাইল নেই, এটি একটি চালকবিহীন pkgconfig --modversion glibc
।) @ জ্নুকের দুর্দান্ত getconf
পরামর্শটিও দেখুন।
সবচেয়ে সহজ কেসিসিপি + গ্লিবিসি সহ কেস, এবং আমি প্রথমে যেটি ব্যবহার করি তা হ'ল কেবল মৃত্যুদন্ড কার্যকর করা libc.so
, যেমন এখানে অন্যান্য উত্তরগুলির কয়েকটিতে বর্ণিত। কোনও যুক্তি পাস করার দরকার নেই, এটি ডিফল্টরূপে এর সংস্করণটি আউটপুট করে। এটি glibc-2.1 (glibc-2.0 seg-faults) হিসাবে কাজ করে, যদিও এরপরে ফিরে আসার পরে আপনি glibcbug
সংস্করণটি নিশ্চিত করতে (এখন অবসরপ্রাপ্ত) স্ক্রিপ্টটি পরীক্ষা করতে পারেন )। এই পদ্ধতিটি সাম্প্রতিক (> 0.9.15) মসল-লিবিসি-র সংস্করণগুলির সাথেও কাজ করে (যা আজ 20 শে মার্চ ঠিক 1.0 গেছে)। এটি uClibc এর সাথে কাজ করে না, এটি segfaults।
আপনার ঠিক কী করতে gcc
চলেছে তা জানার একটি সহজ উপায় হ'ল সংকলন:
#include <gnu/libc-version.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("%s %s\n",gnu_get_libc_version(),gnu_get_libc_release());
printf("glibc v%i %i.%i\n",__GNU_LIBRARY__,__GLIBC__,__GLIBC_MINOR__);
return 0;
}
( গ্লিবিসি <stdio.h>
সহ , <features.h>
প্রাসঙ্গিক জি এল এল বি সি ম্যাক্রো সংজ্ঞায়িত করে, আপনাকে <gnu/libc-version.h>
ফাংশন ঘোষণার জন্য প্রয়োজন ))
আপনি অবশ্যই সঠিক সংকলক (এবং পতাকা) ব্যবহার করছেন তা ধরে নিয়ে এটি আরও জটিল কেসগুলি (একাধিক লিবিসি এবং / অথবা একাধিক সংকলক) ধরে ches (আমি সন্দেহ করি যে এটি যদিও উদাহরণস্বরূপ এবং গ্লিব্যাকের মধ্যে পার্থক্য করবে না))
আপনি যদি নিশ্চিত হন যে আপনি গ্লিবসি (বা উদাহরণস্বরূপ) ব্যবহার করছেন তবে ld
সংস্করণটিও নিশ্চিত করবে (দুঃখিত, এটি সঠিক নয়)।
যদি __GNU_LIBRARY__
সংজ্ঞায়িত না করা হয় তবে আপনি ত্রুটিগুলি পেয়ে যাবেন, তবে এখন পরিকল্পনা বি এর সময় এসেছে
gcc -dumpmachine
যেমন সাহায্য করতে পারে, যেমন uclibc এর জন্য এটির -uclibc
প্রত্যয় রয়েছে, যেমনটি পারে gcc -dumpspecs | grep dynamic-linker
। এটি এবিআইকে বোঝাতেও পারে।
gcc -print-file-name=libc.so
সংকলক " -lc
" এর জন্য কোন ফাইলটি ব্যবহার করবে তা আপনাকে বলবে , এটি অবশ্যই আপনার জিসিসি ইনস্টলেশনের মধ্যে একটি লিঙ্কার-স্ক্রিপ্ট যা আপনি এটি সরল পাঠ্য হিসাবে পড়তে পারেন। এটি সঠিক পথ প্রদর্শন করবে libc.so
। এটাও যদি আপনি চান পতাকা পার করছি কাজ করবে -m32
বা -m64
।
ঘটনা আপনি ব্যবহার করছেন uclibc (যেমন OpenWRT দ্বারা এবং আরো ব্যবহৃত), এটা সংজ্ঞায়িত __UCLIBC_MAJOR__
, __UCLIBC_MINOR__
এবং __UCLIBC_SUBLEVEL__
সেইসাথে __UCLIBC__
মধ্যে <features.h>
, তাই এটি সহজে সি উপরের কোড স্নিপেট উপর একটি ছোটখাট প্রকরণ ব্যবহার শনাক্ত হচ্ছে। সামঞ্জস্যের স্বার্থে, ইউসিপ্লিবক উপরের ব্যবহার অনুসারে জিএনইউ / জিএলবিসি ম্যাক্রোগুলিও সংজ্ঞায়িত করতে পারে, এটি বর্তমানে গ্লিবসি -২.২ হওয়ার ভান করে। এটি বর্তমানে বাস্তবায়ন না gnu_get_libc_X()
ফাংশন, কিন্তু এটি করে বাস্তবায়ন getconf
যা ভুল পথে চালিত হতে পারে (আমি সন্দেহ এটির জন্য একটি খালি উত্তর ফেরৎ getconf GNU_LIBC_VERSION
, আমার build env আজ মুখ ভার করে আছে তাই আমি নিশ্চিত করতে।)
সম্ভাব্য ইভেন্টে আপনি ডায়েটলিবিসি ব্যবহার করছেন , চলমান diet -v
সংস্করণটি প্রদর্শিত হবে।
(এফডাব্লুআইডাব্লু, অটোকনফ ব্যবহার করে সফ্টওয়্যার নিয়ে বেশ কয়েক বছর ধরে আমার চেক-ইন গ্লাবসি বৈশিষ্ট্যগুলির চেয়ে চেক-করা-প্রয়োজনীয়তা gcc
এবং g++
প্রয়োজনীয়তা নিয়ে বেশি সমস্যা হয়েছে more )