'std :: cout' এর অপরিবর্তিত রেফারেন্স


195

এটি উদাহরণ হতে পারে:

#include <iostream>
using namespace std;
int main()
{
    cout << "Hola, moondo.\n";
}

এটি ত্রুটি ছুড়ে ফেলে:

gcc -c main.cpp gcc -o edit main.o  main.o: In function `main':
main.cpp:(.text+0xa): undefined reference to `std::cout'
main.cpp:(.text+0xf): undefined reference to `std::basic_ostream<char,std::char_traits<char> >& std::operator<< <std::char_traits<char>>(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
main.o: In function `__static_initialization_and_destruction_0(int,int)':
main.cpp:(.text+0x3d): undefined reference to `std::ios_base::Init::Init()'
main.cpp:(.text+0x4c): undefined reference to `std::ios_base::Init::~Init()' collect2: error: ld
returned 1 exit status make: *** [qs] Error 1

এছাড়াও, এই উদাহরণ:

#include <iostream>
int main()
{
    std::cout<<"Hola, moondo.\n";
}

ত্রুটি ছুড়ে:

gcc -c main.cpp gcc -o edit main.o  main.o: In function `main':
main.cpp:(.text+0xa): undefined reference to `std::cout'
main.cpp:(.text+0xf): undefined reference to `std::basic_ostream<char,std::char_traits<char> >& std::operator<<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char> >&, char const*)'
main.o: In function `__static_initialization_and_destruction_0(int,int)': main.cpp:(.text+0x3d): undefined reference to `std::ios_base::Init::Init()'
main.cpp:(.text+0x4c): undefined reference to `std::ios_base::Init::~Init()' collect2: error: ld
returned 1 exit status make: *** [qs] Error 1

দ্রষ্টব্য: আমি ডেবিয়ান হুইজি ব্যবহার করছি।


158
g++পরিবর্তে চেষ্টা করুন gccgccসি এর জন্য এবং আপনাকে সি ++ স্ট্যান্ডার্ড লাইব্রেরিতে অ্যাক্সেস দেয় না।
জুয়ানচোপাঞ্জা

2
ঠিক আছে, এটি অবশ্যই সমস্যার সমাধান করেছে। আমি যেমন বুঝতে পেরেছি, জিসিসি হ'ল জিএনপি সংকলক সংগ্রহের সংক্ষিপ্ত রূপ। যখন প্রয়োজন হয় তখন এটি জি ++ সংকলকটি কল করা উচিত নয়? সুতরাং gcc কমান্ডটি পরিবর্তে সি সংকলককে কল করেছে ...
D1X

1
@ ডি 1 এক্স এটি কারণ আপনি লিঙ্কারটি সংকলক থেকে পৃথকভাবে আহ্বান করেছেন। আপনি যখন লিখবেন তখন gcc -o edit main.oএটি জানেন না যে main.oসি ++ প্রারম্ভিক লাইব্রেরিগুলির প্রয়োজন।
এমএম


4
প্রশ্ন: যখন প্রয়োজন হয় তখন এটি জি ++ সংকলকটি কল করা উচিত নয়? উত্তর: জিসিসি ছাড়া আর কোনও প্রয়োজন হিসাবে গফর্ট্রান, জিজেসি, ... ইত্যাদি কল করা উচিত নয়।
পলস্ম 4

উত্তর:


276

এর সাথে প্রোগ্রামটি সংকলন করুন:

g++ -Wall -Wextra -Werror -c main.cpp -o main.o
     ^^^^^^^^^^^^^^^^^^^^ <- For listing all warnings when your code is compiled.

coutসি ++ স্ট্যান্ডার্ড লাইব্রেরিতে যেমন রয়েছে, যার ব্যবহারের সাথে সুস্পষ্ট সংযোগের প্রয়োজন হবে ; ডিফল্টভাবে স্ট্যান্ডার্ড লাইব্রেরি লিঙ্ক।-lstdc++gccg++

সহ gcc, ( g++তার চেয়ে বেশি পছন্দ করা উচিত gcc)

gcc main.cpp -lstdc++ -o main.o

11
এটি সি ++ কোড সংকলন করতে ব্যবহৃত হতে পারে, জিনিসটি এটি সি ++ লাইব্রেরির সাথে লিঙ্ক করে না । gccআপনি কেবল যুক্ত করলে ঠিকঠাক কাজ করবে -lstdc++
কিছু প্রোগ্রামার 13-15

3
-Wallজিসিসি / জি ++ কমান্ড লাইনের উদাহরণ দেওয়ার সময় দয়া করে সর্বদা অন্তর্ভুক্ত করুন - এটি প্রাথমিক পর্যায়ে ভাল অভ্যাসগুলিতে পড়তে সহায়তা করে এবং প্রত্যেকের সময়কে আরও বেশি করে রাস্তায় বাঁচায়। ;-)
পল আর

4
কখন থেকে আইওস্ট্রিম এবং std::coutস্ট্যান্ডার্ড টেম্পলেট লাইব্রেরির অংশ?
টিসি

1
ওয়ারার কেন দরকার? আমি ডকুমেন্টেশনটি সংশোধন করেছি এবং আমি যদি ভালভাবে বুঝতে পারি তবে সতর্কতা ত্রুটি করে ফেলবে এবং আমার প্রকল্পগুলি সংকলন করতে কম সহজ করে তুলবে।
D1X

7
@ ডি 1 এক্স: কারণ প্রোগ্রামারদের মধ্যে সতর্কতাগুলি উপেক্ষা করার একটি বাজে অভ্যাস রয়েছে । ভার্চুয়ালি যা কিছু -Wallএবং এমনকি -Wextraসতর্ক করা হয়েছিল তা হ'ল হয় খুব আসল সমস্যা, বা খুব সহজেই স্থির করা যায় এমন opড়ু কোডিং। এখানে বার্তাটি এমন একটি অভ্যাসে প্রবেশ করা যেখানে আপনি সংকলক সতর্কতাগুলিকে কোনও উপদ্রবের পরিবর্তে আপনার কোডটি আরও উন্নত করা যেতে পারে সেখানে সহায়ক পয়েন্টার হিসাবে বিবেচনা করে। এসওতে এখানে শত শত প্রশ্ন রয়েছে যেগুলি যদি ওপি ব্যবহার করে তবে প্রথমে এটির প্রয়োজন হত না -Wall -Wextra-Werrorএটি কেবল আরও শক্তিশালী করছে।
দেবসোলার


2

ফাইল তৈরী

আপনি যদি কোনও মেকফিলের সাথে কাজ করে থাকেন এবং আমার মতো এখানেই শেষ করেন তবে সম্ভবত আপনি যা খুঁজছেন তা এই:

আপনি যদি কোনও মেকফিল ব্যবহার করছেন তবে ccনীচের মত দেখায় আপনাকে পরিবর্তন করতে হবে

my_executable : main.o
    cc -o my_executable main.o

প্রতি

CC = g++

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