开发者

How to compile C++ under Ubuntu Linux?

开发者 https://www.devze.com 2022-12-11 08:01 出处:网络
I cut&pasted the below code from a previous question into a file called \"avishay.cpp\" and then ran

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, st开发者_运维知识库d::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;
}


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.


You probably should use g++ rather than gcc.


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.


Update your apt-get:

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

Run your program.cpp:

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


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


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.


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

$  gcc avishay.cpp -lstdc++

enjoy


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


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


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++.


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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号