জি ++ দিয়ে সি ++ 11 সংকলন করা হচ্ছে


367

আমি আমার সি ++ সংকলক সি ++ 11 এ আপডেট করার চেষ্টা করছি। আমি কিছুটা অনুসন্ধান করেছি এবং আমি এই সিদ্ধান্তে পৌঁছেছি যে আমাকে পতাকা ব্যবহার করতে হবে -std=c++0xবা -std=gnu++0x, তবে পতাকা সম্পর্কিত অনেক কিছুই আমি জানি না। আমাকে কি কেউ সাহায্য করতে পারবেন? (আমি উবুন্টু 12.04 ব্যবহার করছি))

সি ++ 11 (যেমন অ্যারে) এর অন্তর্ভুক্ত কোনও লাইব্রেরি ব্যবহার করার চেষ্টা করার সময় আমি সংকলকটি থেকে প্রাপ্ত ত্রুটিটি এখানে রয়েছে:

#include <array>
#include <iostream>

int main()
{
    std::array<int, 3> arr = {2, 3, 5};
    ...
}

এই ফাইলটির আসন্ন আইএসও সি ++ স্ট্যান্ডার্ড, সি ++ 0x এর জন্য সংকলক এবং গ্রন্থাগার সমর্থন দরকার। এই সমর্থনটি বর্তমানে পরীক্ষামূলক, এবং অবশ্যই -std = c ++ 0x বা -std = gnu ++ 0x সংকলক বিকল্পগুলির সাথে সক্ষম হওয়া আবশ্যক।


5
নতুন সংস্করণে, সম্ভবত এর -std=c++11পরিবর্তে আপনাকে সম্ভবত ব্যবহার করতে হবে। যদিও উভয়ই অনুমোদিত, যদিও।

6
এটি প্রচুর প্রসঙ্গে মিস করে। আপনি চেষ্টা করেছেন এমন পূর্ণ কমান্ড (সম্ভবত আপনি সংকলন করার চেষ্টা করেছেন এমন নমুনা কোড) এবং কী ব্যর্থ হয়েছে তা প্রদর্শন করুন।
কিলিয়ানডিএস

4
@ ক্লাসডাকনোক_টি: উভয়কেই অনুমতি দেওয়া উচিত, g++-4.6ডিফল্টরূপে 12.04 জাহাজকেও উবুন্টু করা উচিত (যা কেবল সমর্থন করে -std=c++0x)
কিলিয়ানএসডিএস

3
ঠিক পরে পতাকা যুক্ত করুন g++, যেমন g++ -std=c++0x _filename_ && ./a.out
এন। 'সর্বনাম' মি।

1
শিরোনামে ত্রুটি বার্তাটি অনুসন্ধান করে এই পোস্টটি জুড়ে এসেছিল। আমি একটি QMAKE প্রকল্পে কাজ করছি, আমার জন্য সমাধানটি .pro ফাইলে CONFIG + = c ++ 11 যুক্ত করছে।

উত্তর:


529

পতাকাগুলি (বা সংকলক বিকল্পগুলি) সাধারণ কমান্ড লাইন আর্গুমেন্টগুলি নির্বাহযোগ্যকে সংযোজনকারীকে পাস করা ছাড়া কিছুই নয়।

ধরে নিই আপনি কমান্ড লাইন (টার্মিনাল) থেকে g ++ চালাচ্ছেন:

$ g++ -std=c++11 your_file.cpp -o your_program

অথবা

$ g++ -std=c++0x your_file.cpp -o your_program

উপরের কাজ না হলে।


8
-Wall -gঠিক পরে রাখতে ভুলবেন নাg++
বেসাইল স্টারিনকিভিচ

7
@ বেসাইলস্টারিঙ্কেভিচ: আমি -Werrorকোনও প্রকল্প শুরু করার সময় না করার কোনও কারণও যুক্ত করব।
ম্যাথিউ এম।

3
আরও ভাল সি ++ সমর্থন বিতর্কযোগ্য এবং আরও ভাল ডায়াগোনস্টিকগুলি আজকাল এতটা ভাল লাগছে না (তাদের বিবরণে বর্ণিত পৃষ্ঠাটি জিসিসি ৪.২ ব্যবহার করে যা প্রাচীন) gcc.gnu.org/wiki/ClangDiagnosticsComp तुलना ;)
জোনাথন

58
সি /+ কম্পাইলাররা সি ++ 11 মানকে ডিফল্ট হিসাবে, যে কোনও পতাকা ছাড়াই সমর্থন করবে কিনা তা কি কেউ জানেন?
ডেনিস

2
এবং যদি আপনি ইতিমধ্যে জানেন না, ভিজ্যুয়াল সি ++ এ কেবলমাত্র ভিসি 11 (ভিজ্যুয়াল স্টুডিও 2012) বা তার চেয়ে বেশি সি ++ 11 বৈশিষ্ট্যগুলি ব্যবহার করুন
জেরিটান

44

আপনি g++কমান্ড দ্বারা আপনার পরীক্ষা করতে পারেন :

which g++
g++ --version

এটি আপনাকে নির্দেশ করবে যে বর্তমানে কোন সংস্থাপক এটি নির্দেশ করছে।

g++4.7 এ স্যুইচ করতে (ধরে নিলে আপনি এটি আপনার মেশিনে ইনস্টল করেছেন), চালনা করুন:

sudo update-alternatives --config gcc

There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path              Priority   Status
------------------------------------------------------------
  0            /usr/bin/gcc-4.6   60        auto mode
  1            /usr/bin/gcc-4.6   60        manual mode
* 2            /usr/bin/gcc-4.7   40        manual mode

তারপরে নির্বাচন 2হিসাবে নির্বাচন করুন (আমার মেশিনটি ইতিমধ্যে g++4.7 এ নির্দেশ করছে , তাই *)

একবার আপনি কম্পাইলারটি স্যুইচ করেছেন তারপরে আবার চালনা g++ --versionকরে স্যুইচিংটি সঠিকভাবে ঘটেছে।

এখন আপনার প্রোগ্রামটি সংকলন করুন

g++ -std=c++11 your_file.cpp -o main

জি ++ ৪.৪ এর মতো সংস্করণগুলি কিছু বৈশিষ্ট্যগুলির তুলনায় খুব পুরানো হতে পারে, তাই আপগ্রেড করা প্রয়োজনীয়। আপগ্রেড করা আপনার সিস্টেমে নির্ভর করবে এবং আমি g ++ নিজেই সংকলনের পদ্ধতি এবং সিস্টেমের
কলিন ডি

13

আপনার উবুন্টুতে অবশ্যই G ++ এর যথেষ্ট সাম্প্রতিক সংস্করণ রয়েছে। পতাকা ব্যবহার করা হয় -std=c++0x


আপনি কীভাবে বলতে পারেন, তিনি উবুন্টু ব্যবহার করছেন? শুধু জানতে আগ্রহী।
শ্রাবণ 40

22
@ শ্রাবণ 40 ওপি স্পষ্টভাবে I'm using Ubuntu 12.04.প্রশ্নে বলেছেন ।
তীমথিয় গু

10

আপনি যদি জিএনইউ সংকলক এক্সটেনশান রাখতে চান তবে -std = c ++ 0x এর পরিবর্তে -std = gnu ++ 0x ব্যবহার করুন। ম্যান পৃষ্ঠাটির একটি উদ্ধৃতি এখানে:

সংকলকটি বেশ কয়েকটি বেস স্ট্যান্ডার্ড গ্রহণ করতে পারে যেমন সি 98 বা সি ++ 98, এবং সেই মানগুলির GNU উপভাষা যেমন gnu89 বা gnu ++ 98 গ্রহণ করতে পারে। একটি বেস স্ট্যান্ডার্ড নির্দিষ্ট করে, সংকলক সেই মান অনুসরণ করে সমস্ত প্রোগ্রাম এবং GNU এক্সটেনশানগুলি ব্যবহার করে যারা এটির বিরোধী নয় তাদের গ্রহণ করবে। উদাহরণস্বরূপ, -std = c89 "এসএম" এবং "টাইপফুল" কীওয়ার্ডগুলির মতো আইএসও সি 90 এর সাথে সামঞ্জস্যপূর্ণ নয় এমন জিসিসির কিছু বৈশিষ্ট্যগুলি বন্ধ করে দেয়, তবে অন্যান্য জিএনইউ এক্সটেনশানগুলির যেমন আইএসও সি 90 এর কোনও অর্থ নেই, বাদ দেওয়া যেমন একটি "?:" প্রকাশের মধ্যবর্তী শব্দ। অন্যদিকে, একটি স্ট্যান্ডার্ডের একটি জিএনইউ উপভাষা নির্দিষ্ট করে, সংকলক সমর্থনটি সমস্ত বৈশিষ্ট্য সক্ষম করা হয়, এমনকি যখন সেই বৈশিষ্ট্যগুলি বেস স্ট্যান্ডার্ডটির অর্থ পরিবর্তন করে এবং কিছু কঠোর-অনুসারী প্রোগ্রামগুলি বাতিল হয়ে যায়। মানকটির সংস্করণ অনুসারে কোন বৈশিষ্ট্যগুলি জিএনইউ এক্সটেনশনগুলি তা চিহ্নিত করতে নির্দিষ্ট মানটি -পডেন্টিক দ্বারা ব্যবহৃত হয়। উদাহরণস্বরূপ- std = gnu89 -pedantic সি ++ স্টাইল // মন্তব্য সম্পর্কে সতর্ক করবে, যখন -std = gnu99 -pedantic করবে না।


এবং বাইনারি ?:অপারেটরকে বাদ দিয়ে আপনি কী পাবেন ? কেবলমাত্র অন্যান্য এক্সটেনশান যা মনে আসে, কাঠামো প্রকাশগুলি, সি ++ 11 তালিকা সূচনা দ্বারা উত্তোলন করা হয়। যাই হোক না কেন, এই উদ্ধৃতিটি মূলত সি ++ এর সাথে সম্পর্কিত নয়।
পোটোসওয়টার

9

আপনি নিম্নলিখিত লিঙ্কটি উল্লেখ করতে পারেন যার জন্য বৈশিষ্ট্যগুলি সংকলকের বিশেষ সংস্করণে সমর্থিত। এটি সংকলকটিতে বৈশিষ্ট্য সহায়তার একটি বিস্তৃত তালিকা রয়েছে। দেখে মনে হচ্ছে জিসিসি মানকটি নিবিড়ভাবে অনুসরণ করে এবং অন্য কোনও সংকলকের আগে প্রয়োগ করে।

আপনার প্রশ্ন সম্পর্কিত আপনি ব্যবহার করে সংকলন করতে পারেন

  1. g++ -std=c++11 সি ++ 11 এর জন্য
  2. g++ -std=c++14 সি ++ 14 এর জন্য
  3. g++ -std=c++17 সি ++ 17 এর জন্য
  4. g++ -std=c++2aসি ++ ২০ এর জন্য, যদিও সি ++ 20 এর সমস্ত বৈশিষ্ট্য এখনও সমর্থিত নয় , জিসিসিতে বৈশিষ্ট্য সমর্থন তালিকার জন্য এই লিঙ্কটি উল্লেখ করুন

তালিকাটি খুব দ্রুত পরিবর্তিত হয়, আপনি যদি কোনও বিশেষ বৈশিষ্ট্য সমর্থন করার অপেক্ষায় থাকেন তবে তালিকার দিকে নজর রাখুন।

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