জিসিসি থেকে আলাদাভাবে গ্লিবিক রক্ষণাবেক্ষণ করা হয় কেন?


13

জিসিসি হ'ল সি সংকলক। গ্লিবসি সি লাইব্রেরি। যাইহোক, এটি কোনও সংকলক এবং স্ট্যান্ডার্ড লাইব্রেরি সি বাস্তবায়নের জন্য একসাথে বান্ডিল করার জন্য চূড়ান্ত প্রয়োজনীয়তা নয় কি?

উদাহরণ হিসেবে বলা যায়, সি গ্রন্থাগার মত ABI- র এবং কম্পাইলার নির্দিষ্ট কাপড় রয়েছে <limits.h>, <stdint.h>ইত্যাদি, যা কম্পাইলার ও API গুলি মধ্যে পৃথক। এবং "কীভাবে একটি মূল ফাংশন কল করবেন" এর মতো বিবরণগুলিও সংকলকের উপর নির্ভর করে, তবে বাস্তবে এই বিবরণগুলি libc.soলিনাক্স সিস্টেমে সরবরাহ করা হয়। উদাহরণস্বরূপ, যদি আমি int8 টি বাইট ব্যবহারের মতো অন্য এবিআইয়ের সাথে কাজ করার জন্য সংকলকটি পরিবর্তন করি তবে সি লাইব্রেরি আর কাজ করবে না কারণ <limits.h>স্টাফটি ভুল হয়ে যাবে।

উত্তর:


20

এর অন্যতম কারণ হ'ল জিসিসি নিজস্ব সি স্ট্যান্ডার্ড লাইব্রেরিযুক্ত (যেমন ম্যাকোএসএক্স, সোলারিস, এইচপিইউক্স বা কিছু ফ্রিবিএসডি) প্রোপ্রেটারি ইউনিক্স সিস্টেমগুলিতে তৈরি এবং ব্যবহার করা যেতে পারে ।

এমনকি লিনাক্সেও আপনার সি স্ট্যান্ডার্ড লাইব্রেরি থাকতে পারে যা জিএনইউ গ্লিবিসি নয় । বিশেষত, আপনি লিনাক্স সিস্টেমে মসল-লিবিসি বা বায়োনিক (অ্যান্ড্রয়েড সিস্টেমগুলি) বা ডায়েটলিবিক ইত্যাদির সাথে জিসিসি তৈরি করতে (বা এটি ব্যবহার করতে পারেন) এবং একটি লিনাক্স সিস্টেমে জিএনইউ গ্লিবসি থাকতে পারে এবং কিছু সি সি সংকলক (যেমন ক্ল্যাং) ব্যবহার করতে পারে বা টিনিসিসি)।

এছাড়াও সি লাইব্রেরি লিনাক্স কার্নেলের উপর নির্ভর করে। কার্নেলের কিছু পুরানো সংস্করণগুলির জন্য কিছু নির্দিষ্ট ধরণের (বা সংস্করণ) প্রয়োজন হতে পারে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& collect2linkers, asপ্রতীকী ভাষান্তর, ইত্যাদি ...) এমনকি এবং যা হেডার অন্তর্ভুক্ত করা হয়েছে, যা লাইব্রেরি ও অবজেক্ট ফাইলগুলি সংযুক্ত করা হয় ( স্পষ্টতই , সি স্ট্যান্ডার্ড গ্রন্থাগার এবং crt0 সহ )। জিসিসি বিকল্পগুলি সম্পর্কে আরও পড়ুন ।

বিটিডাব্লু , আপনি যথাযথ অতিরিক্ত যুক্তি উপস্থাপন করে আপনার জিসিসির প্রত্যাশার চেয়ে আলাদা একটি সি স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করতে পারেন (যেমন musl-libcবা কিছু ডায়েটলিবিসি ) gcc...


1
সঠিক উত্তর, সঠিক নকশা না থাকলেও। এজন্য এমএসভিসি ++ প্রি -2011 / 2014 অপারেটিং সিস্টেমের জন্য সি ++ 11 / সি ++ 14 কোড সংকলন করতে পারে, তবে জিসিসি সাধারণত এটি করতে পারে না।
এমসাল্টাররা

"সঠিক নকশা নয়" বলতে কী বোঝ? এবং আমি নিশ্চিত নই যে জিসিসি পুরানো ওএসগুলির জন্য সি ++ 14 কোডটি সংকলন করতে পারে না (তবে আপনাকে সেই ওএসের ওপরে একটি সাম্প্রতিক জিসিসি সংকলনের প্রয়োজন হতে পারে)।
বেসাইল স্টারিনকিভিচ

আইএসও সি অনুসারে সি স্ট্যান্ডার্ড লাইব্রেরি সংকলকের অংশ। একই সি ++ লাইব্রেরির জন্য রয়েছে। এখন সমস্যাটি হ'ল একটি নতুন জিসিসি সংস্করণ দিয়ে নির্মিত অ্যাপ্লিকেশনগুলির ওএস যেখানে গড়া হয়েছে তার গ্লিবিকের উপর নির্ভরশীলতা থাকবে যা লক্ষ্য সিস্টেমে গ্লিবিকের চেয়েও নতুন হতে পারে। একটি আরও ভাল সমাধান সম্ভবত gcclibcওএস লাইব্রেরিগুলির উপর নির্ভর করে যা নির্ভর করে , তবে এটি জিসিসির অংশ হিসাবে রূপান্তরিত হয়েছে, ওএস নয়।
এমসাল্টাররা

আপনি কি নিশ্চিত যে সি 11 বা সি ++ 14 স্ট্যান্ডার্ডগুলি "সংকলক" শব্দটি উল্লেখ করেছে? এএফআইইউ তারা "বাস্তবায়ন" (যা এমনকি কোনও সফ্টওয়্যার নাও হতে পারে) সম্পর্কে কথা বলে
বেসাইল স্টারিনকিভিচ

1
কিছু শিরোনাম, যেমন <stdint.h>বা <limits.h>সত্যই জিসিসি সরবরাহ করে are অন্যান্য শিরোনাম, যেমন <stdlib.h>সি লাইব্রেরি থেকে নেওয়া এবং জিসিসি বিল্ড চলাকালীন "স্থির"।
বেসাইল স্টারিনকিভিচ

-5

সংক্ষিপ্ত উত্তরটি হ'ল যদি দু'জনকে একত্রে 'বান্ডিল' করা হয়, তবে গ্লিবিসি জিপিএল * এর অধীনে লাইসেন্স দেওয়া হত, এবং তাই এটি মালিকানাধীন প্রকল্পগুলির জন্য পুরোপুরি অনুপযুক্ত। যদিও এফএসএফ এবং জিএনইউ প্রকল্পের মালিকানাধীন সফ্টওয়্যারটির কোনও ভালবাসা নেই, গ্লিবিকে জিসিসি এবং ফ্রি সফটওয়্যার ইকোসিস্টেম গ্রহণের অগ্রাধিকারের কৌশলগত পছন্দ হিসাবে এলজিপিএল লাইসেন্স দেওয়া হয়েছিল। জিসিসি আসলে একটি নির্দিষ্ট রানটাইম সংযোগ ব্যতিক্রম সহ জিপিএল এর অধীনে লাইসেন্স পেয়েছে, কারণ পরিস্থিতি কিছুটা অশান্ত। বুদ্ধিমান অংশীদারি-গ্রন্থাগার পরিস্থিতিতে অনুমতি দিতে গ্লিবিক এলজিপিএল অনুযায়ী লাইসেন্সপ্রাপ্ত হয়।

https://www.gnu.org/licenses/gcc-exception-faq.html

অতিরিক্তভাবে, গ্লিবিসিতে বিভিন্ন ধরণের অপারেটিং সিস্টেমের জন্য এটি খাপ খাইয়ে নেওয়ার জন্য সমস্ত ধরণের শিমস এবং অন্যান্য উপাদান রয়েছে এবং জিসিসি হিসাবে একই প্যাকেজ হিসাবে বিতরণও জিনিসগুলিকে অগোছালো করে তুলবে।

* পর্যায়ক্রমে, জিসিসিকে অন্য কোনও জিপিএল-এর অধীনে লাইসেন্স দেওয়া যেতে পারে, যদিও এ বিষয়ে এফএসএফের চিন্তাভাবনা "আমার মৃত দেহের ওপরে" লাইনের ধারায় থাকবে।


3
দুঃখিত, তবে এই উত্তরটি IMHO ভুল। "একসাথে বান্ডিলিং" এর অর্থ জিপিএল-এ বর্ণিত অর্থে গিসি-র কাছ থেকে একটি "উত্সাহিত কাজ" করা নয়। উদাহরণস্বরূপ, প্রতিটি লিনাক্স ডিস্ট্রোতে বিভিন্ন ওপেন সোর্স লাইসেন্স ব্যবহার করে প্রচুর সফটওয়্যার প্যাকেজগুলি "একসাথে বান্ডিল করা হয়" তবুও এই প্যাকেজগুলি জিপিএল লঙ্ঘন করে না।
ডক ব্রাউন

বান্ডিলিং জিসিসি এবং গ্লিবসি একসাথে গ্লিবিকে জিপিএল এর অধীনে থাকতে বাধ্য করবে? আমার বোঝা ছিল যে বান্ডিলগুলি একটি "সম্মিলিত কাজ" নয়, তাই জিপিএল সীমানা অতিক্রম করে না। সম্পাদনা করুন: ডক ব্রাউন যা বলেছে :-)
ফিলিপ কেন্ডাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.