কীভাবে gcc 4.8 কে ডিফল্ট জিসিসি সংকলক হিসাবে সেট করবেন


27

আমি সম্প্রতি gcc 4.8ব্যবহার brewকরে ইনস্টল করেছি OSX 10.7.5 (Lion)। আমি এখন ব্যবহার gcc 4.8করে সংকলন করতে পারি

g++-4.8 some_file.c

বা ডিফল্ট gcc 4.2ব্যবহার করে

g++ some_file.c

আমি gcc 4.8ডিফল্ট সংকলক হিসাবে ব্যবহার করতে চাই Xcodeএবং যদি আমি gccটার্মিনালে টাইপ করি । আমি মনে করি আমার gcc-relatedমধ্যে লিঙ্কগুলি অবশ্যই পরিবর্তন করতে হবে dirname $(which gcc)

যখন আমি করি

ls -al $(dirname $(which gcc)) | grep 'gcc\|g++\|c++'

আমি নিম্নলিখিত পেতে:

lrwxr-xr-x     1 root   wheel         7 Jul 31 12:17 c++ -> clang++
-rwxr-xr-x     1 root   wheel    909360 Nov 18  2011 c++filt
lrwxr-xr-x     1 root   wheel         5 Jul 31 12:17 clang++ -> clang
lrwxr-xr-x     1 root   wheel        12 Jul 31 12:17 g++ -> llvm-g++-4.2
lrwxr-xr-x     1 root   wheel        12 Jul 31 12:17 gcc -> llvm-gcc-4.2
lrwxr-xr-x     1 root   wheel        28 Jul 31 12:17 gcov-4.2 -> ../llvm-gcc-4.2/bin/gcov-4.2
lrwxr-xr-x     1 root   wheel        52 Jul 31 12:17 i686-apple-darwin11-llvm-g++-4.2 -> ../llvm-gcc-4.2/bin/i686-apple-darwin11-llvm-g++-4.2
lrwxr-xr-x     1 root   wheel        52 Jul 31 12:17 i686-apple-darwin11-llvm-gcc-4.2 -> ../llvm-gcc-4.2/bin/i686-apple-darwin11-llvm-gcc-4.2
lrwxr-xr-x     1 root   wheel        32 Jul 31 12:17 llvm-cpp-4.2 -> ../llvm-gcc-4.2/bin/llvm-cpp-4.2
lrwxr-xr-x     1 root   wheel        32 Jul 31 12:17 llvm-g++ -> ../llvm-gcc-4.2/bin/llvm-g++-4.2
lrwxr-xr-x     1 root   wheel        32 Jul 31 12:17 llvm-g++-4.2 -> ../llvm-gcc-4.2/bin/llvm-g++-4.2
lrwxr-xr-x     1 root   wheel        32 Jul 31 12:17 llvm-gcc -> ../llvm-gcc-4.2/bin/llvm-gcc-4.2
lrwxr-xr-x     1 root   wheel        32 Jul 31 12:17 llvm-gcc-4.2 -> ../llvm-gcc-4.2/bin/llvm-gcc-4.2

আমি যখন দৌড়ে: which gcc-4.8আমি পেতে /usr/local/bin/gcc-4.8

এটি করার পদক্ষেপগুলি খুব সহায়ক হবে।

অনুগ্রহ করে এবং ধন্যবাদ.


1
উচ্চতর এলএলভিএম ঝাঁকুনি ব্যবহার না করার কোনও কারণ?
সর্বাধিক Ried 16'13

বিশেষভাবে না। ভ্যানিলা জিসিসির সাথে তুলনা করে এলএলভিএম ঝাঁকুনির কী লাভ?
কুইন

3
দ্রুত হওয়ার সাথে সাথে এটি অর্থবহ সতর্কতাও দেয়, একটি সত্যই মূল্যবান বৈশিষ্ট্য জিসিসির পুরোপুরি অভাব থাকে।
ম্যাক্স রেড

আমি দেখি. কি clang 3.3সমতূল্য gcc 4.8? আমি বিশ্বাস করি আমি brew installএটিও পারি ।
কুইন

প্রথম প্রশ্নটি জিজ্ঞাসা করা হ'ল আপনি কেন জিসিসি-৪.৮ এর পরিবর্তে এক্সকোড দিয়ে সরবরাহ করা ঝাঁকুনি ব্যবহার করতে পারবেন না - তারপরে আমরা ক্ল্যাং ৩.৩ এর উত্তরটি কাজ করতে পারে
user151019

উত্তর:


20

ধরে নিই যে আপনি ব্যাশ ব্যবহার করছেন (এটি ডিফল্ট), তারপরে আপনি এইভাবে প্যাথ-এ আপনার শীর্ষ অগ্রাধিকার হিসাবে / usr / স্থানীয় / বিন যোগ করতে পারেন:

echo "PATH=\"/usr/local/bin:$PATH\"" >> ~/.bash_profile

এটি নিশ্চিত করবে যে আপনার পথের অন্যান্য সমস্ত ক্ষেত্রের আগে / usr / স্থানীয় / বিন পরীক্ষা করা হয়েছে। তারপরে নতুন ভেরিয়েবলটি লোড করতে একটি নতুন টার্মিনাল সেশন শুরু করুন।

এটি করার আরেকটি উপায়:

  cd /usr/bin
  rm cc gcc c++ g++
  ln -s /usr/local/bin/gcc-4.8 cc
  ln -s /usr/local/bin/gcc-4.8 gcc
  ln -s /usr/local/bin/c++-4.8 c++
  ln -s /usr/local/bin/g++-4.8 g++

আমার চিন্তার পথে ইতিমধ্যে রয়েছে usr/local/binecho $PATHপ্রকাশ করে: / অপ্ট / লোকাল / বিন: / অপ্ট / লোকাল / এসবিন: / অপ্ট / লোকাল / অন্তর্ভুক্ত: / ইউএসআর / লোকাল / মাইএসকিএল / বিন: / ইউএসআর / বিন / বিজাম: / ইউএসআর / বিন: / বিন: / ইউএসআর / এসবিন: / এসবিন: / ইউএসআর / স্থানীয় / বিন: / ইউএসআর / এক্স 11 / বিন: / ইউএসআর / স্থানীয় / গো / বিন: / ইউএসআর / টেক্সবিন
কুইন

আরও একটি বিকল্প যুক্ত হয়েছে
ডিজিটালচাইল্ড

1
হ্যাঁ এতে এতে রয়েছে তবে এটি / ইউএসআর / বিনের পরে রয়েছে যাতে এটি প্রথমে পড়া হয় না। PATH ক্রমিক হয়।
ডিজিটালচাইল্ড

1
উভয় বিকল্প আমার পক্ষে কাজ করে না বলে মনে হচ্ছে। আমি সরানো /usr/local/bin1 ম প্রদর্শিত PATHযা কোনো প্রভাব ছিল না - - কলিং gccএখনও এ দেখায় gcc 4.2তারপর নিজে symlinks নির্মিত .আমি কিন্তু যখন আমি একটি নতুন টার্মিনাল উইন্ডো এবং খুলতে g++অথবা ( cc|c++|gcc) সমস্ত পাওয়া যায় না। স্ট্রেঞ্জ। আপনার সাহায্যের জন্য ধন্যবাদ
কুইন

3
আমি /usr/binকোনও ইউনিক্স (যা ম্যাকোস এক্স) এর মধ্যে খেলতে পরামর্শ দেব না ... যদি না আপনি পরবর্তী ইউনিক্স সংস্করণ ☺ এর নতুন সংস্করণের উত্সগুলিতে কাজ করছেন ☺
ডান

19

আপনার সাহায্যের জন্য আপনি সমস্ত ধন্যবাদ। আমি ~/.bash_profileনিম্নলিখিত হিসাবে কেবলমাত্র এলিয়াস তৈরি করা শেষ করেছি :

alias gcc='gcc-4.8'
alias cc='gcc-4.8'
alias g++='g++-4.8'
alias c++='c++-4.8'

লিনকেনের উত্তরটি খুব সহায়ক, তবে আমি এটিকে এ্যালিয়াসের সাথে মানিয়ে নিয়েছি যেহেতু প্রয়োজনে আমার পূর্বাবস্থায় ফেরা সহজ।

বিশেষত, যদি এমনটি PATHসেট করা থাকে /usr/local/bin(যেখানে সংযুক্তি লিঙ্কটি রাখে gcc 4.8) উপস্থিত হওয়ার আগে উপস্থিত হয় /usr/bin(যেখানে gccডিফল্টরূপে লিঙ্ক করা হয়), তারপরে লিঙ্কনের পরামর্শ অনুসারে লিঙ্কগুলি তৈরি করা /usr/local/binআমার তাত্ত্বিকভাবে কাজ করা উচিত। অনুশীলনে, এটি কোনও কারণে নয় - লিংকার ত্রুটির সাথে ব্যর্থ হওয়া এবং উপকরণগুলি আমাকেও এই সমস্যাটি সমাধান করার প্রয়োজন ছাড়াই সেই ত্রুটিটি ঘিরে কাজ করে।

এলিয়াসগুলির অন্য সুবিধাটি হ'ল আমি যে লিংকটি আমি হোমব্রু হ্যান্ডেল করতে চাই তা সংযোগের প্রয়োজন নেই এবং সেই সরঞ্জামটির সাথে প্রতিযোগিতা করতে হবে না যার জন্য জিসিসির সংস্করণটি সংযুক্ত রয়েছে /usr/local


আপনি যে কোনও নতুন বাইনারিটির মধ্যে ইনস্টল করবেন তার জন্য আপনাকে এটি পরিবর্তন করতে হতে পারে /usr/local/bin/usr/local/binআপনার প্যাথের মধ্যে খারাপ অবস্থানের কারণে আপনার কাছে অন্যান্য বাইনারিও ইনস্টল এবং লুকানো থাকতে পারে । দয়া করে আরও একবার আমার উত্তর বিবেচনা করুন, এটি একবার আপনার সঠিক সমস্যাটিকে সঠিকভাবে এবং চিরকালের জন্য আক্রমণ করছে attac
ডান

ঠিক। আমি Lyken উল্লেখ নি আগে আমি রদবদল PATHএবং করা /usr/local/binসব আগে। আমি স্বীকার করি যে আপনার বক্তব্যটি সঠিক এবং আমার পরিবর্তন করতে হবে PATH, তবে (আমার ক্ষেত্রে - অর্থাত্ ডিফল্ট brewইনস্টল হওয়া gcc 4.8) আমি কল করার gcc 4.8পরে আমি ডিফল্টরূপে কল করব না gccকারণ ডিফল্টরূপে দুজনের মধ্যে কোনও সিমলিংক নেই। উপরের মতো আমাকে নিজেও এটি তৈরি করতে হয়েছিল।
কুইন

আমি এর নিজস্ব উত্তর হিসাবে যথেষ্ট আলাদা বলবো, আমি আপনার উত্তরটি যদিও সমাধান হিসাবে চিহ্নিত করব।
ডিজিটালচাইল্ড

ঠিক আছে - ধন্যবাদ লাইকেন সিস্টেম আমাকে এটি করার অনুমতি দেওয়ার সাথে সাথেই করব।
কুইন

1
আমি ওরফেও চেষ্টা করেছিলাম তবে এটি কেবল সঠিকভাবে কাজ করে যদি আপনি gccসরাসরি টার্মিনাল থেকে চালান । আপনি যদি কোনও মেকফিল ব্যবহার করেন clangতবে এখনও ব্যবহৃত হয়, কেবলমাত্র উপলব্ধ একটি সংকলক বিকল্প ব্যবহার করার সময় আমি এই সমস্যাটি কেবলমাত্র খুঁজে পেয়েছি gcc
টিয়ান ডো

11

আমি gcc-4.8 এ ব্যবহার করি:

export CC=/usr/local/bin/gcc

export CXX=/usr/local/bin/g++

export CPP=/usr/local/bin/cpp

export LD=/usr/local/bin/gcc

alias c++=/usr/local/bin/c++

alias g++=/usr/local/bin/g++

alias gcc=/usr/local/bin/gcc

alias cpp=/usr/local/bin/cpp

alias ld=/usr/local/bin/gcc

alias cc=/usr/local/bin/gcc

এবং অ্যাপল জিসিসি তে ফিরে:

export CC=/usr/bin/gcc

export CXX=/usr/bin/g++

export CPP=/usr/bin/cpp

export LD=/usr/bin/ld

alias c++=/usr/bin/c++

alias g++=/usr/bin/g++

alias gcc=/usr/bin/gcc

alias cpp=/usr/bin/cpp

alias cc=/usr/bin/gcc

alias ld=/usr/bin/ld

অথবা এটি ফাইলের মধ্যে রাখুন এবং তারপরে: source <file>


1

আসুন ধরে নেওয়া যাক আপনার আসল শেল সূচনাটি সম্পন্ন হয়েছে ~/.profile, তারপরে আপনাকে এটি সংশোধন করতে হবে যাতে /usr/local/binঅন্য কোনও PATH উপাদান যেখানে gccএবং এর সাথে সম্পর্কিত সমস্ত বাইনারি রয়েছে তার আগে রাখতে হবে।

এই পরিষ্কার পরিমার্জনটি সম্পাদন করার উপায় এখানে:

সিডি

_শেল_আইনিট = `egrep '(^ |) পথ'। প্রোফাইল 2> / দেব / নাল

যদি ["$ {_ শেল_ইনিট}" = ""]; তারপর
    # PATH। প্রোফাইলে সংজ্ঞায়িত করা হয়নি
    # সেখানে প্যাথের প্রথম আপেক্ষিক সংজ্ঞা ইনস্টল করুন
    প্রতিধ্বনি 'PATH = / usr / স্থানীয় / বিন: {AT पथ}
পাঠ্যপথ '>> প্রোফাইল export
    । .profile
    এক্সিকিউট {EL বিক্রয়}
আর
    # / usr / স্থানীয় / বিনের যেখানেই হোক না কেন সমস্ত উপস্থিতি সরিয়ে দিন
    # PATH এ সেট করুন, এবং অন্যান্য সমস্ত উপাদানগুলির আগে এটি sertোকান
    sed -E -e '/ (^ |) PATH = / s,: / usr / স্থানীয় / বিন,' \
        -e '/ (^ |) PATH = / s, / usr / স্থানীয় / বিন:,' \
        -e '/ (^ |) PATH = / s, & / usr / স্থানীয় / বিন :,'। প্রোফাইল> .প্রোফাইল.নিউ
    এমভি .প্রোফাইল.নিউ .প্রোফাইল
    । .profile
    এক্সিকিউট {EL বিক্রয়}
ফাই

সাবধানতা: আপনার ~/.profileযদি ইতিমধ্যে কাঠামোগত হয় তবে সঠিক প্যাথ সংজ্ঞাটি সঠিক জায়গায় ফিট করার জন্য এই শেল স্ক্রিপ্টটি ম্যানুয়ালি টিউন করতে হবে।


এটি অবশ্যই পরিবর্তন করার জন্য নিখুঁতPATH তাই এটি /usr/local/binআগে দেখা যায়। এটি সম্ভবত ভবিষ্যতে আমার মাথাব্যথা বাঁচাবে। আমি আপনাকে +1 করতে পারতাম। আমার সমস্যা যদিও যে gccএখনও লিঙ্ক করা হয় gcc 4.2এবং gcc 4.8এর জন্য কোন সিমবলিক লিঙ্ক না থাকায় gcc -> gcc-4.8মধ্যে /usr/local/bin। আমি এখনও পারেন ওরফে করতে হবে gccযেমন gcc-4.8মধ্যে ~/.profileবা সিমবলিক লিঙ্ক ( ln -s gcc-4.8 gcc) এ /usr/local/binআপডেট করার পরে PATHআপনার স্ক্রিপ্টের সঙ্গে। তোমরা?
কুইন

আমি অবাক হয়েছি brewসঠিক প্রতীকী লিঙ্কগুলি যোগ করেনি। আপনি কি একই বিষয়ে এই উত্তরটি পড়েছেন: আপেল.স্ট্যাকেক্সেঞ্জারএইচএ / 38/7247/22003 ?
দান

0

এটি ধরে নেওয়া হয় যে মেকিং ওরফে বা বিভিন্ন জিসিসি বাইনারিগুলির সাথে লিঙ্ক করা তাদের ডিফল্ট সিস্টেমে ফোল্ডার অন্তর্ভুক্ত করার আগে তাদের নিজস্ব অন্তর্ভুক্ত ব্যবহার করবে।

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