如何在Linux中编译c ++程序?


How to compile a c++ program in Linux?

我创建了一个文件hi.cpp,并编写了下面给出的命令:

1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;
int main ()
{
  cout <<"Hello World!";
  cout <<"I'm a C++ program";
  return 0;
}

然后我用下面的命令在我的RHEL6机器中运行它

1
gcc hi.cpp

我有一些错误,如下:

1
2
3
4
5
6
7
8
9
10
11
12
[chankey@localhost ~]$ gcc hi.cpp
/tmp/cc32bnmR.o: In function `main':
hi.cpp:(.text+0xa): undefined reference to `std::cout'

hi.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> >&, const char*)'
hi.cpp:(.text+0x19): undefined reference to `std::cout'

hi.cpp:(.text+0x1e): 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> >&, const char*)'
/tmp/cc32bnmR.o: In function `__static_initialization_and_destruction_0(int, int)'
:
hi.cpp:(.text+0x4c): undefined reference to `std::ios_base::Init::Init()'
hi.cpp:(.text+0x51): undefined reference to `std::ios_base::Init::~Init()'

/tmp/cc32bnmR.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
[chankey@localhost ~]$

这些错误表示什么?我的代码是正确的,那我为什么会出错?


使用G++

1
g++ -o hi hi.cpp

G++是C++的,GCC是C语言的,虽然用-LISBSTDC + +,你可以编译C++,大多数人不这样做。


正如其他答案所说,使用g++而不是gcc。

或使用品牌:make hi


你必须使用G++(如其他答案所述)。除此之外,您还可以考虑在命令行中提供一些好的选项(这有助于避免生成格式错误的代码):

1
2
3
g++   -O4    -Wall hi.cpp -o hi.out
     ^^^^^   ^^^^^^
  optimize  related to coding mistakes

有关更多详细信息,请参阅man g++ | less


试试这个:

1
g++ -o hi hi.cpp

GCC仅适用于C


1
g++ -o foo foo.cpp

用于cc1plus编译器的g+->驱动程序

-o->表示输出文件(这里的foo是输出文件的名称)。可以是任何名称)

foo.cpp——>要编译的源文件

要执行编译文件,只需键入

1
./foo

$G++1st.cpp-O 1st

美元/1

如果发现任何错误,请首先使用下面的代码安装G++

$sudo apt安装G++

然后安装g++并使用上面的运行代码