উবুন্টুতে ডিফল্ট জিসিসি সংকলকটি কীভাবে পরিবর্তন করবেন?


98

আমি উবুন্টু ১১.০৪-তে জিসিসি-৩.৩ / জি ++ - ৩.৩ ইনস্টল করেছি যা ইতিমধ্যে জিসিসি / জি ++ - ৪.৪ রয়েছে। সুতরাং আমার সিস্টেমে gcc-3.3 এবং 4.4 উভয়ই উপলব্ধ। আমি উভয় সংকলককে আমি চাই হিসাবে কল করতে সক্ষম। আমি যদি কেবল কমান্ডটি কল করি gccতবে জিসিসি-৪.৪ কল হবে। Gcc-3.3 কল করতে আমাকে কমান্ডটি ব্যবহার করতে হবে gcc-3.3

আমি কীভাবে gcc-3.3 হিসাবে ডিফল্ট সংকলক পরিবর্তন করতে পারি? যখন আমি কমান্ডটি কার্যকর করি তখন gccএটি জিসিসি -৩.৩ কল করা উচিত, জিসিসি-৪.৪ নয়।

তদ্ব্যতীত, আমি কীভাবে একটি মেক ফাইলের ভেরিয়েবল সিএক্সএক্সকে জিসিসি -৩.৩ এ পরিবর্তন করতে পারি? আমি সমস্ত মেক ফাইল পরিবর্তন না করে সিস্টেমে একটি সাধারণ গ্লোবাল স্থান পরিবর্তন করতে চাই।


4
CXX পতাকা জন্য আপনি ডাকা যাবে CXX=gcc-3.3বা export CXX=gcc-3.3এবং তারপর makeযখন আপনি এটি বিশ্বব্যাপী পরিবর্তন সঙ্গে অবশ্য update-alternativesএটি আগে থেকেই জিসিসি-3.3 ব্যবহার করবে এবং এই প্রয়োজন হয় না।
ডিপসুইচ

4
@ রোবোএলেক্স: আপনার সিএক্সএক্স এনভায়রনমেন্ট ভেরিয়েবলের অনুরোধটি আমলে নিতে আমার উত্তরটি আবার আপডেট করেছে। তবে দয়া করে নোট করুন যে আপনি পরে আপডেট-বিকল্পগুলি সংশোধন করে তবে এটি কেবলমাত্র কার্যকর হবে।
জোপাসেরাত

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

উত্তর:


114

@ টমির পরামর্শ অনুসারে, আপনার ব্যবহার করা উচিত update-alternatives
এটি পরিবারের প্রতিটি সফ্টওয়্যারকে মান নির্ধারণ করে, যাতে এটি ক্রম সংজ্ঞায়িত করে যাতে অ্যাপ্লিকেশনগুলি কল করা হবে।

এটি কোনও সিস্টেমে একই সফ্টওয়্যারের বিভিন্ন সংস্করণ বজায় রাখতে ব্যবহৃত হয়। আপনার ক্ষেত্রে, আপনি বেশ কয়েকটি অস্বীকৃতি ব্যবহার করতে সক্ষম হবেন gccএবং একটির পক্ষপাতী হবে।

জিসিসির বর্তমান অগ্রাধিকারগুলি খুঁজে বের করতে, @ ট্রিপলির মন্তব্য দ্বারা নির্দেশিত কমান্ডটি টাইপ করুন:

update-alternatives --query gcc

এখন, উল্লেখ করা অগ্রাধিকারটি নোট করুন gcc-4.4কারণ আপনাকে আরও উচ্চতর দিতে হবে gcc-3.3
আপনার বিকল্প সেট করতে, আপনার এর মতো কিছু থাকা উচিত (ধরে নিলে আপনার gccইনস্টলেশনটি অবস্থিত /usr/bin/gcc-3.3এবং gcc-4.4এর অগ্রাধিকার 50 এর চেয়ে কম) :

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.3 50

--edit--

অবশেষে, আপনি update-alternativesসংস্করণগুলির মধ্যে সহজেই স্যুইচ করতে এর ইন্টারেক্টিভ ইন্টারফেসও ব্যবহার করতে পারেন। টাইপ করুন update-alternatives --config gccজিসিসি সংস্করণ ইনস্টল তাদের মধ্যে ব্যবহার করতে চান চয়ন করতে বলা হবে।

--edit 2 -

এখন, সিস্টেমে সিএনএক্সএক্স এনভায়রনমেন্ট ভেরিয়েবলটি ঠিক করতে আপনার .bashrcফাইলটিতে @ ডিপসউইচ দ্বারা নির্দেশিত লাইনটি লাগাতে হবে (এটি কেবলমাত্র আপনার ব্যবহারকারীর জন্য পরিবর্তনটি প্রয়োগ করবে, যা আমার মতে নিরাপদ):

echo 'export CXX=/usr/bin/gcc-3.3' >> ~/.bashrc

4
@ থ্যাঙ্ক এটিকেও ডেকেছে cc:root@host:/root# update-alternatives --get-selections | grep '/usr/bin/gcc' cc auto /usr/bin/gcc
জোপাসেরাত

আমি যখন 'আপডেট-বিকল্পগুলি
কনফিগ জিসিসি

আপনি কিভাবে এই স্বয়ংক্রিয়ভাবে করতে পারে? এর আউটপুট চেক করার জন্য একটি ম্যানুয়াল পদক্ষেপ প্রয়োজন update-alternatives --query gcc, যা কোনও স্বয়ংক্রিয় ব্যবস্থাপনার স্ক্রিপ্টে যেমন কাজ করতে পারে না। এছাড়াও, কীভাবে এটিকে প্ল্যাটফর্ম অজিনস্টিক করা যায়?
ely

70

টিএল; ডিআর জনতার জন্য jHackTheRipper- এর উত্তরের একটি সম্পূর্ণ উদাহরণ এখানে। :-) এই ক্ষেত্রে, আমি উবুন্টু সিস্টেমে জি ++ - 4.5 চালাতে চেয়েছিলাম যা ডিফল্ট ৪.6 এ গেছে। যেমন root:

apt-get install g++-4.5
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 100
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.5 50
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 100
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.5 50
update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.6 100
update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.5 50
update-alternatives --set g++ /usr/bin/g++-4.5
update-alternatives --set gcc /usr/bin/gcc-4.5
update-alternatives --set cpp-bin /usr/bin/cpp-4.5

এখানে, 4.6 এখনও ডিফল্ট (ওরফে "অটো মোড"), তবে আমি স্পষ্টভাবে অস্থায়ীভাবে 4.5 (ম্যানুয়াল মোড) এ স্যুইচ করি। 4.6 এ ফিরে যেতে:

update-alternatives --auto g++
update-alternatives --auto gcc
update-alternatives --auto cpp-bin

(ব্যবহারের দ্রষ্টব্য cpp-binমাত্র পরিবর্তে cpp। উবুন্টু ইতিমধ্যে একটি রয়েছে cppওস্তাদ লিঙ্ক সহ বিকল্প /lib/cpp। যে লিঙ্ক পুনঃনামকরণ করা মুছে ফেলা হবে /lib/cppলিঙ্ক, যা স্ক্রিপ্ট বিরতি পারে।)


8
ভবিষ্যতের অলস ব্যক্তির জন্য ইনস্টলড g ++ - 5 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 100
সংকলকটি

কেবলমাত্র 1 টি প্রশ্ন রয়ে গেছে: g++-6প্যাকেজ ইনস্টল করার সময় এপিটি কেন এটি করবে না ?
রুস্টিক্স 26'19

আমি ডিফল্ট সংকলকটি এইভাবে g ++ - 5 এ সরিয়েছি, তবে এটি এখনও g ++ - 7 স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করে এবং এখন আমি অপরিজ্ঞাত স্টাফগুলিতে ত্রুটি পেয়েছি __builtin
Youda008

23

এটি মাস্টার এবং স্লেভ (জিসিসি এবং জি ++) বিকল্পগুলি কীভাবে তৈরি এবং পরিচালনা করতে পারে তা দুর্দান্ত বিবরণ এবং ধাপে ধাপে নির্দেশ।

শীঘ্রই এটি:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7
sudo update-alternatives --config gcc

40 এবং 60 এর সাথে কী আছে। আমি gcc-6 ব্যবহার করার চেষ্টা করছি।
nyxee

@nyxee 40 এবং 60 প্রতিটি এন্ট্রিতে নির্ধারিত অগ্রাধিকার বোঝায়, বিষয়টিতে আরও সম্পূর্ণতার জন্য অন্যান্য উত্তরগুলি পরীক্ষা করুন
জোপাসেরাত

10

সবার সাথে 4.8 এবং 6 এর মধ্যে --slaves:

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 \
                    10 \
                    --slave   /usr/bin/cc cc /usr/bin/gcc-4.8 \
                    --slave   /usr/bin/c++ c++ /usr/bin/g++-4.8 \
                    --slave   /usr/bin/g++ g++ /usr/bin/g++-4.8 \
                    --slave   /usr/bin/gcov gcov /usr/bin/gcov-4.8 \
                    --slave   /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-4.8 \
                    --slave   /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-4.8 \
                    --slave   /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-4.8 \
                    --slave   /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-4.8 \
                    --slave   /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-4.8

এবং

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 \
                    15 \
                    --slave   /usr/bin/cc cc /usr/bin/gcc-6 \
                    --slave   /usr/bin/c++ c++ /usr/bin/g++-6 \
                    --slave   /usr/bin/g++ g++ /usr/bin/g++-6 \
                    --slave   /usr/bin/gcov gcov /usr/bin/gcov-6 \
                    --slave   /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-6 \
                    --slave   /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-6 \
                    --slave   /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-6 \
                    --slave   /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-6 \
                    --slave   /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-6

তাদের সাথে পরিবর্তন করুন update-alternatives --config gcc


4
অপসারণ ccএবং c++ লাইনের পরে কাজ করে যা ত্রুটির কারণ হয়ে থাকে: বিকল্প সিসি
জিসিসির

7

এখন, উবুন্টু / সুনির্দিষ্ট জন্য gcc-4.9 উপলব্ধ।

সংকলক বিকল্পগুলির একটি গ্রুপ তৈরি করুন যেখানে ডিস্ট্রো সংকলকটির উচ্চ অগ্রাধিকার রয়েছে:

root$ VER=4.6 ; PRIO=60
root$ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
root$ update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-$VER $PRIO

root$ VER=4.9 ; PRIO=40
root$ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
root$ update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-$VER $PRIO

দ্রষ্টব্য: জি ++ সংস্করণটি একটি সিসিআর সংস্করণ স্যুইচ দিয়ে স্বয়ংক্রিয়ভাবে পরিবর্তিত হয়। "সিপিপি" মাস্টার বিকল্প উপস্থিত থাকায় সিপিপি-বিন আলাদাভাবে করতে হবে।

উপলব্ধ সংকলক বিকল্প তালিকা:

root$ update-alternatives --list gcc
root$ update-alternatives --list cpp-bin

Gcc, g ++ এবং cpp এর ম্যানুয়ালি সংস্করণ 4.9 নির্বাচন করতে, করুন:

root$ update-alternatives --config gcc
root$ update-alternatives --config cpp-bin

সংকলক সংস্করণ পরীক্ষা করুন:

root$ for i in gcc g++ cpp ; do $i --version ; done

ডিস্ট্রো সংকলক সেটিংস পুনরুদ্ধার করুন (এখানে: v4.6 এ ফিরে):

root$ update-alternatives --auto gcc
root$ update-alternatives --auto cpp-bin

2

একটি নতুন ক্ল্যাং সংকলক ইনস্টল করার চেষ্টা করার সময় আমি এই সমস্যাটি পেয়েছি। দেখা যাচ্ছে উভয় যে ডেবিয়ান এবং LLVM রক্ষণাবেক্ষণকারীকে একমত যে বিকল্প সিস্টেমের জন্য ব্যবহার করা উচিত বিকল্প, না ভার্সন

তাদের প্রস্তাবিত সমাধানটি হ'ল এইরকম:
PATH=/usr/lib/llvm-3.7/bin:$PATH
যেখানে /usr/lib/llvm-3.7/bin একটি ডিরেক্টরি যা llvm-3.7 প্যাকেজটি দ্বারা নির্মিত হয়েছিল এবং এতে তাদের অনিচ্ছুক নামের সমস্ত সরঞ্জাম রয়েছে। এটির সাথে, llvm-config (সংস্করণ 3.7) আপনার PATH এ এর ​​সরল নাম সহ প্রদর্শিত হবে। সিমলিংকের সাহায্যে চারপাশ ছড়িয়ে পড়ার দরকার নেই, বা / usr / bin ইনস্টল হওয়া llvm-config-3.7 কল করতে হবে না।

এছাড়াও, llvm-Defaults (বা gcc-defaults) নামে একটি প্যাকেজ পরীক্ষা করুন, যা এটি করার অন্যান্য উপায় প্রস্তাব করতে পারে (আমি এটি ব্যবহার করি নি)।


দুর্দান্ত সমাধান! আমি কাস্টম বিল্ট "জিসিসি" স্যুটগুলির মধ্যে নির্বাচন করার জন্য এটি ব্যবহার করি
ম্যাড শান্ত

1

যদি আপনি ব্যক্তিগত উদ্দেশ্যে এটি অর্জনের দ্রুত (তবে এখনও খুব পরিষ্কার) উপায় চান তবে (উদাহরণস্বরূপ আপনি যদি সংকলকের সংস্করণ সম্পর্কিত কিছু দৃ requirements় প্রয়োজনীয়তা সম্পন্ন একটি নির্দিষ্ট প্রকল্প বানাতে চান) তবে কেবল নীচের পদক্ষেপগুলি অনুসরণ করুন:

  • খুব উচ্চ অগ্রাধিকার প্রাপ্ত echo $PATHএকটি ব্যক্তিগত ডিরেক্টরি টাইপ করুন এবং সন্ধান করুন (আমার ক্ষেত্রে, আমার আছে ~/.local/bin);
  • এই ডিরেক্টরিতে প্রতীকী লিঙ্কগুলি যুক্ত করুন:

এই ক্ষেত্রে:

ln -s /usr/bin/gcc-WHATEVER ~/.local/bin/gcc
ln -s /usr/bin/g++-WHATEVER ~/.local/bin/g++

অবশ্যই এটি কোনও একক ব্যবহারকারীর জন্য কাজ করবে (এটি কোনও সিস্টেম বিস্তৃত সমাধান নয়) তবে অন্যদিকে আমি আমার ইনস্টলেশনটিতে খুব বেশি জিনিস পরিবর্তন করতে পছন্দ করি না।


সুতরাং আপনি নিজের নিজস্ব অ্যাড-হক তৈরি করছেন, সমান্তরাল-থেকে-সিস্টেমের বিকল্প সিস্টেম। আসল জিনিসটি ব্যবহার করবেন না কেন?
hmijail

@hmijail আমি যেমন বর্ণনা করেছি, আমি যখন আমার সম্পূর্ণ ইনস্টলেশনটি গোলযোগ না করে খুব বেশি একক প্রকল্প তৈরি করতে চাই তখন আমি এই উপায়টি ব্যবহার করি। এটি খুব ভাল কাজ করে এবং আমি সহজেই পরে এটি মুছে ফেলতে পারি।
থমাস বারুচেল

4
কেবলমাত্র আপনার पथপথ পরিবর্তন করা দ্রুত, পরিষ্কার এবং আপনার জিসিসি-সম্পর্কিত সরঞ্জামগুলিকে একে অপরের সাথে সিঙ্ক করে রাখবে।
hmijail

0

আমি নীচের লাইনগুলি ব্যবহার করেছি এবং এটি কার্যকর হয়েছে। আমি শুধু কম্পাইল করতে চেয়েছিলেন VirtualBoxএবং VMWare WorkStationব্যবহার kernel 4.8.10উপর Ubuntu 14.04। প্রাথমিকভাবে, বেশিরভাগ জিনিস উদাহরণস্বরূপ গ্রাফিক্স এবং নেটওয়ার্কিংয়ের জন্য কাজ করে না। আমি ভাগ্যবান যে VMWare workstationজন্য অনুরোধ gcc 6.2.0Genymotion Android emulatorsভার্চুয়ালবক্স ডাউন থাকায় আমি শুরু করতে পারিনি । প্রয়োজনে পরে ফলাফল পোস্ট করবে।

VER=4.6 ; PRIO=60
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
VER=6 ; PRIO=50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
VER=4.8 ; PRIO=40
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.