সিসি 1 এবং জিসিসির মধ্যে সম্পর্ক?


23

আমি লিনাক্স সার্ভারে (রুট অ্যাক্সেস ছাড়াই) আমার হোম ডিরেক্টরিতে রুবি ইনস্টল করার চেষ্টা করছি, যা অবশ্যই ব্যবহারের প্রয়োজন gcc। আমি যে নিকটতম জিনিসটি সন্ধান করতে পারি তা হ'ল নামের একটি ডিরেক্টরি যা (আপনি যদি যথেষ্ট গভীরভাবে যান) থাকে cc1:

>: find / -iname gcc 2> /dev/null
/usr/libexec/gcc


>: tree -if /usr/libexec/gcc
/usr/libexec/gcc
/usr/libexec/gcc/x86_64-redhat-linux
/usr/libexec/gcc/x86_64-redhat-linux/4.1.1
/usr/libexec/gcc/x86_64-redhat-linux/4.1.1/cc1
/usr/libexec/gcc/x86_64-redhat-linux/4.1.2 -> 4.1.1

সিসি 1 উইকিপিডিয়ায় জিসিসিতে পুনর্নির্দেশ করাকে সত্য পরিচয়ের খুব কাছাকাছি বোঝা যাচ্ছে, তবে জিিসিসি পৃষ্ঠায় সিসি 1 সম্পর্কে অন্য কোনও উল্লেখ নেই, এবং গুগলিং আমাকে দরকারী কিছু করতে পারেনি, এবং আমার ব্যবহারের চেষ্টাও cc1করেছেন জায়গা gccব্যর্থ হয়েছে।

তাদের মধ্যে সম্পর্ক ঠিক কী? এবং এটি কি আমাকে এই যন্ত্রটিতে রুবি সংকলনের কোনও আশার প্রস্তাব দেয়?

উত্তর:


28

জিসিসির সংকলনের বেশ কয়েকটি পর্যায় রয়েছে এবং প্রতিটি পর্বে এটি বিভিন্ন অভ্যন্তরীণ কমান্ড ব্যবহার করে। বিশেষত সি প্রথমে সিপিপিতে প্রস্রোসেসড হয়, তারপরে অ্যাসেমব্লিতে সংকলিত হয়, মেশিনের ভাষায় একত্রিত হয় এবং তারপরে একসাথে যুক্ত হয়।

cc1 হ'ল অভ্যন্তরীণ কমান্ড যা প্রাক-প্রক্রিয়াজাত সি-ভাষা ফাইলগুলি গ্রহণ করে এবং তাদের সমাবেশে রূপান্তর করে। এটি আসল অংশ যা সি ++ এর জন্য সি সংকলন করে, সেখানে সিসি 1 প্লাস এবং বিভিন্ন ভাষার জন্য অন্যান্য অভ্যন্তরীণ কমান্ড রয়েছে।

উইকিউবুকের একটি বই রয়েছে যা ছবি সহ প্রক্রিয়াটি ব্যাখ্যা করে

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


2
সাধারণ শব্দটি "ফ্রন্ট এন্ড"।
কিথ থম্পসন

1
আপনি কি নিশ্চিত যে এটির জন্য প্রাক-প্রক্রিয়াজাত সি ফাইলগুলি প্রয়োজন? আমি মনে করি cc1ফাইলগুলি #includeএবং #defineনির্দেশাবলীর সাথে ফাইল করতে সক্ষম হব
চূড়ান্তভাবে 5

10

gccএই স্যুটটির স্যুইটের নাম ccহ'ল সি সংকলক।

শব্দটি ccএটি ইউনিক্স সিস্টেমের অধীনে প্রদত্ত সি সংকলনের জন্য একটি জেনেরিক নামও উদাহরণস্বরূপ CCপ্রদত্ত বিল্ডিং স্ক্রিপ্টে কনফিগার করা পরিবেশের পরিবর্তনশীল খুঁজে পাওয়া বা স্ক্রিপ্ট কনফিগার করা বিরল নয় , এবং আপনি যদি পেডেন্টিক হতে চান তবে এই ভেরিয়েবলটি সাধারণত এসিগুলিকে নির্দেশ করে সংকলক যা অগত্যা আপনার সংকলিত অবজেক্টের সংযোগ সম্পাদন করে না, এটি সাধারণত একটি সংকলককে উল্লেখ করে যা "ঠিক" সংকলন করে। ccথেকে gcc, কিন্তু, আউটপুট করতে পারবেন একটি সমাপ্ত এক্সিকিউটেবল তাই খুব তার linker সঙ্গে এই চূড়ান্ত পদক্ষেপ সঞ্চালন করতে সক্ষম হয়।

এটি শব্দটি cc1প্রায়শই "অভ্যন্তরীণ" হিসাবে ব্যবহৃত হয় বা জিএনইউ ডক্স পড়ার সময় ( উদাহরণস্বরূপ ), তারা কোন ভাষা বা সংকলকের সাথে সম্পর্কিত তার ভিত্তিতে জিসিসি-সম্পর্কিত লাইব্রেরিটির নামকরণ করতে ব্যবহৃত হয় (এই ক্ষেত্রে সিসি 1 = সি সংকলকের অন্তর্ভুক্ত)।

আপনি যদি gccশব্দের অর্থ কী তা যদি জিজ্ঞাসা করেন তবে প্রকৃতপক্ষেcc1

gcc -print-prog-name=cc1

সিসি সংকলকটির জন্য এটি লাইব্রেরির পথটির সাথে উত্তর দেওয়া উচিত, সুতরাং আপনি এমন কিছু কার্যকর করার চেষ্টা করছেন যা একটি লাইব্রেরি এবং বাস্তব সম্পাদনযোগ্য নয়।

সিসি কে সি সংকলক হিসাবে স্মরণ করা এবং সবকিছু সহজ করার পক্ষে এটি অনেক সহজ, এই সিসি 1 কে বাইপাস করুন, আপনি দীর্ঘ যাত্রা শুরু করতে না চাইলে জিনিসগুলি অভ্যন্তরীণভাবে কীভাবে কাজ করে তা আপনার জানতে হবে না।


4

অন্যরা যেমন উল্লেখ করেছে, gccব্যবহার করে cc1

সঠিক যা পথ cc1এবং অন্যান্য উপ-প্রোগ্রামের মত cppএবং ldবলা হয় সম্পন্ন করা হয় দ্বারা নির্ধারিত হয় বৈশিষ্ট ফাইল বিন্যাস।

বর্তমান স্পেক ফাইলটি এর সাথে দেখা যেতে পারে:

gcc -dumpspecs

সম্পর্কিত বিভাগটি মনে হয়:

*cc1_options:
%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}} %{!iplugindir*:%{fplugin*:%:find-plugindir()}} %1 %{!Q:-quiet} %{!dumpbase:-dumpbase %B} %{d*} %{m*} %{aux-info*} %{fcompare-debug-second:%:compare-debug-auxbase-opt(%b)}  %{!fcompare-debug-second:%{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}}%{!c:%{!S:-auxbase %b}}  %{g*} %{O*} %{W*&pedantic*} %{w} %{std*&ansi&trigraphs} %{v:-version} %{pg:-p} %{p} %{f*} %{undef} %{Qn:-fno-ident} %{Qy:} %{-help:--help} %{-target-help:--target-help} %{-version:--version} %{-help=*:--help=%*} %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}} %{fsyntax-only:-o %j} %{-param*} %{coverage:-fprofile-arcs -ftest-coverage}

এবং আপনি নিজের স্পেক ফাইলটি এর সাথে ব্যবহার করতে পারেন:

gcc -specs=<specs-file>

অবশ্যই, কমান্ড লাইন বিকল্পগুলি জিসিসিতে পাস হয়েছে উপ-প্রক্রিয়াগুলি কীভাবে ডাকা হয় তা পরোক্ষভাবে পরিবর্তন করে। তবে স্পেক ফাইলগুলিকে ম্যানিপুলেট করা আপনাকে আরও স্বাচ্ছন্দ্য দেয় এবং কমান্ড লাইনের বিকল্পগুলি যেমন করতে পারে না এমন কাজগুলি আপনাকে করতে দেয়, যেমন /programming/7493620/inhibit-default-library-paths-with-gcc

আপনি যা দিয়ে সহজেই চালাচ্ছেন তা পর্যবেক্ষণ করতে পারেন:

gcc -v hello_world.c |& grep cc1

নমুনা আউটপুট:

/usr/lib/gcc/x86_64-linux-gnu/4.8/cc1 -quiet -v -imultiarch x86_64-linux-gnu hello_world.c -quiet -dumpbase hello_world.c -mtune=generic -march=x86-64 -auxbase hello_world -version -fstack-protector -Wformat -Wformat-security -o /tmp/ccvcVNAX.s

1

cc1 প্রিপ্রসেসর এবং সংকলক উভয়ই, যার ইনপুট সি উত্স কোড এবং আউটপুটটি সমাবেশ কোড।

আপনি দেখতে পাচ্ছেন cc1হ'ল আদেশগুলির মধ্যে একটি হ'ল (প্রথমটি, বাস্তবে) জারি করে (সংস্করণের উপর নির্ভরশীল সিনট্যাক্স):
gcc-8 -v SOMESOURCE.c

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.