এর অন্যতম কারণ হ'ল জিসিসি নিজস্ব সি স্ট্যান্ডার্ড লাইব্রেরিযুক্ত (যেমন ম্যাকোএসএক্স, সোলারিস, এইচপিইউক্স বা কিছু ফ্রিবিএসডি) প্রোপ্রেটারি ইউনিক্স সিস্টেমগুলিতে তৈরি এবং ব্যবহার করা যেতে পারে ।
এমনকি লিনাক্সেও আপনার সি স্ট্যান্ডার্ড লাইব্রেরি থাকতে পারে যা জিএনইউ গ্লিবিসি নয় । বিশেষত, আপনি লিনাক্স সিস্টেমে মসল-লিবিসি বা বায়োনিক (অ্যান্ড্রয়েড সিস্টেমগুলি) বা ডায়েটলিবিক ইত্যাদির সাথে জিসিসি তৈরি করতে (বা এটি ব্যবহার করতে পারেন) এবং একটি লিনাক্স সিস্টেমে জিএনইউ গ্লিবসি থাকতে পারে এবং কিছু সি সি সংকলক (যেমন ক্ল্যাং) ব্যবহার করতে পারে বা টিনিসিসি)।
এছাড়াও সি লাইব্রেরি লিনাক্স কার্নেলের উপর নির্ভর করে। কার্নেলের কিছু পুরানো সংস্করণগুলির জন্য কিছু নির্দিষ্ট ধরণের (বা সংস্করণ) প্রয়োজন হতে পারেlibc
এবং জিসিসি ক্রস সংকলক হিসাবে বিল্ডেবল ।
এবং " main
ফাংশনটি কীভাবে কল করবেন" এর মতো বিবরণগুলিও সংকলকের উপর নির্ভর করে, তবে বাস্তবে, এই বিবরণগুলি libc.so
একটি লিনাক্স সিস্টেমে সরবরাহ করা হয়।
এটি ঠিক সঠিক নয়। main
ফাংশন দ্বারা বলা হয় (ক হোস্ট পরিবেশে) crt0 কাপড়, এর মধ্যে কয়েকটি জিসিসি দ্বারা প্রদান করা হয় (যেমন /usr/lib/gcc/x86_64-linux-gnu/6/crtbegin.o
আমার ডেবিয়ান / সিদ / x86-64 'থেকে libgcc-6-dev
প্যাকেজ)। সম্পর্কেও পড়ুনlibgcc
প্রকৃতপক্ষে, libc
জিসিসির এবং জিসিসির মধ্যে কিছুটা অর্ধ-গোপন সম্পর্ক রয়েছে , উদাহরণস্বরূপ, কারণ অনেকগুলি libc
শিরোনাম (বিকল্পভাবে) কিছু জিসিসি বিল্টিন বা ফাংশন বৈশিষ্ট্য ব্যবহার করে ।
(অতএব জিসিসি বিকাশকারী এবং জিএনইউ লিবিসি বিকাশকারীদের ইন্টারঅ্যাক্ট করতে হবে)
.... আমি যদি অন্য ABI এর সাথে কাজ করার জন্য সংকলকটি পরিবর্তন করি ...
আপনার এটি দরকার ... /configure
এটি জিসিসি সংকলক এবং এটি পুনর্নির্মাণ করতে হবে এবং আপনাকে জিসিসি সংকলকটি প্যাচ করার প্রয়োজন হতে পারে (আপনার এবিআই এবং কলিং কনভেনশনগুলি বর্ণনা করার জন্য )। X32 ABI- র একটি ভাল উদাহরণ।
শেষ অবধি, জিসিসি (আমাকে সহ) এর কিছু অবদানকারী বা রক্ষণাবেক্ষণকারীরা একটি কপিরাইট অ্যাসাইনমেন্টে স্বাক্ষর করেছেন যা জিসিসি নয় তবে জিএনইউকে অন্তর্ভুক্ত করে glibc
।
(জিসিসি লাইসেন্স সম্পর্কিত, জিসিসি রানটাইম লাইব্রেরি ব্যতিক্রম সাবধানে পড়ুন )
লক্ষ্য করুন যে কিছু মানক শিরোনাম, যেমন <limits.h>
বা <stdint.h>
জিসিসি সরবরাহ করেছে; অন্যরা, যেমন <stdlib.h>
জিসিসি বিল্ড চলাকালীন "স্থির" থাকে: সংকলক বিল্ড পদ্ধতি এগুলি Libc বাস্তবায়ন থেকে নেয় এবং তাদের প্যাচ করে। এখনও, অন্যান্য মান হেডার (সম্ভবত <stdio.h>
এবং অভ্যন্তরীণ হেডার এটা সহ হয়) থেকে নেয়া হয় libc
। জিসিসি ফিক্সিনকল এবং ফিক্সড শিরোনাম ফাইলগুলি সম্পর্কে আরও পড়ুন ।
(স্থির জিনিসটি এমন কিছু যা আমি (বেসাইল) এখনও ভাল বুঝতে পারি না)
আপনার সাথে কম্পাইল পারে gcc -v -H
আরো স্পষ্ট করে বুঝতে যা প্রকৃত প্রোগ্রাম চালানো হয় (যেহেতু gcc
একটি চালক, দৌড়ানো cc1
কম্পাইলার, ld
& collect2
linkers, as
প্রতীকী ভাষান্তর, ইত্যাদি ...) এমনকি এবং যা হেডার অন্তর্ভুক্ত করা হয়েছে, যা লাইব্রেরি ও অবজেক্ট ফাইলগুলি সংযুক্ত করা হয় ( স্পষ্টতই , সি স্ট্যান্ডার্ড গ্রন্থাগার এবং crt0 সহ )। জিসিসি বিকল্পগুলি সম্পর্কে আরও পড়ুন ।
বিটিডাব্লু , আপনি যথাযথ অতিরিক্ত যুক্তি উপস্থাপন করে আপনার জিসিসির প্রত্যাশার চেয়ে আলাদা একটি সি স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করতে পারেন (যেমন musl-libc
বা কিছু ডায়েটলিবিসি ) gcc
...