Tutorial :How to compile C++ under Ubuntu Linux?



Question:

I cut&pasted the below code from a previous question into a file called "avishay.cpp" and then ran

gcc avishay.cpp  

only to get the following error messages from the linker. What went wrong, what should I have done?

carl@carl-ubuntu:~/Projects/StackOverflow$ gcc -static avishay.cpp   /tmp/cccRNW34.o: In function `__static_initialization_and_destruction_0(int, int)':  avishay.cpp:(.text+0x41): undefined reference to `std::ios_base::Init::Init()'  avishay.cpp:(.text+0x46): undefined reference to `std::ios_base::Init::~Init()'  /tmp/cccRNW34.o: In function `A::func()':  avishay.cpp:(.text._ZN1A4funcEv[A::func()]+0x11): undefined reference to `std::cout'  avishay.cpp:(.text._ZN1A4funcEv[A::func()]+0x16): 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*)'  avishay.cpp:(.text._ZN1A4funcEv[A::func()]+0x1e): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'  avishay.cpp:(.text._ZN1A4funcEv[A::func()]+0x26): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'  avishay.cpp:(.text._ZN1A4funcEv[A::func()]+0x36): undefined reference to `std::cout'  avishay.cpp:(.text._ZN1A4funcEv[A::func()]+0x3b): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(int)'  /tmp/cccRNW34.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'  collect2: ld returned 1 exit status  

The C++ code (not my code, I was just trying to run it):

#include <iostream>  using namespace std;    class A  {  private:     int _dmember;    public:     void func()     {       cout<<"Inside A!! "<<endl;       cout<<_dmember; // crash when reach here.     }  };    int main ()    {        A* a= NULL;        a->func(); // prints "Inside A!!!"         return 1;  }  


Solution:1

You should use g++, not gcc, to compile C++ programs.

For this particular program, I just typed

make avishay  

and let make figure out the rest. Gives your executable a decent name, too, instead of a.out.


Solution:2

You probably should use g++ rather than gcc.


Solution:3

Yes, use g++ to compile. It will automatically add all the references to libstdc++ which are necessary to link the program.

g++ source.cpp -o source  

If you omit the -o parameter, the resultant executable will be named a.out. In any case, executable permissions have already been set, so no need to chmod anything.

Also, the code will give you undefined behaviour (and probably a SIGSEGV) as you are dereferencing a NULL pointer and trying to call a member function on an object that doesn't exist, so it most certainly will not print anything. It will probably crash or do some funky dance.


Solution:4

Update your apt-get:

$ sudo apt-get update  $ sudo apt-get install g++  

Run your program.cpp:

$ g++ program.cpp  $ ./a.out  


Solution:5

g++ is the C++ compiler under linux. The code looks right. It is possible that you are missing a library reference which is used as such:

g++ -l{library name here (math fns use "m")} codefile.cpp


Solution:6

Use

g++

space followed by the program name. e.g:

g++ prog.cpp

if the filename was "prog.cpp" in this case. if you want to run the program write:

./prog  

so i used

"prog"

because it was my filename.


Solution:7

even you can compile your c++ code by gcc Sounds funny ?? Yes it is. try it

$  gcc avishay.cpp -lstdc++  

enjoy


Solution:8

Use g++. And make sure you have the relevant libraries installed.


Solution:9

you can use g++ --std=c++0x example.cpp -o example


Solution:10

To compile source.cpp, run

g++ source.cpp  

This command will compile source.cpp to file a.out in the same directory. To run the compiled file, run

./a.out  

If you compile another source file, with g++ source2.cpp, the new compiled file a.out will overwrite the a.out generated with source.cpp

If you want to compile source.cpp to a specific file, say compiledfile, run

g++ source.cpp -o compiledfile  

or

g++ -o compiledfile source.cpp  

This will create the compiledfile which is the compiled binary file. to run the compiledfile, run

./compiledfile  

If g++ is not in your $PATH, replace g++ with /usr/bin/g++.


Solution:11

Install gcc and try the video below.
Try this:
https://www.youtube.com/watch?v=A6v2Ceqy4Tk
Hope it will works for you.


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »