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

时间:2011-08-10 03:57:16

标签: c++

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

#include <iostream>
using namespace std;
int main ()
{
  cout << "Hello World! ";
  cout << "I'm a C++ program";
  return 0;
}

然后我使用以下命令在我的RHEL 6机器上运行它

gcc hi.cpp

我遇到了一些错误,如下:

[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 ~]$ 

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

8 个答案:

答案 0 :(得分:51)

使用g ++

g++ -o hi hi.cpp

g ++适用于C ++,gcc适用于C,但使用-libstdc ++可以编译c ++,大多数人都不这样做。

答案 1 :(得分:13)

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

或使用make:make hi

答案 2 :(得分:6)

你必须使用g ++(如其他答案中所述)。最重要的是,你可以考虑在命令行提供一些好的选项(这可以帮助你避免生成错误的代码):

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

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

答案 3 :(得分:3)

试试这个:

g++ -o hi hi.cpp

gcc仅适用于C

答案 4 :(得分:0)

$ g ++ 1st.cpp -o 1st

$ ./1st

如果您发现任何错误,请先使用以下代码安装g ++

$ sudo apt-get install g ++

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

答案 5 :(得分:0)

g++ -o foo foo.cpp

g ++ - &gt; Driver for cc1plus compiler

-o - &gt;表示输出文件( foo 是此处输出文件的名称。可以是任何名称)

foo.cpp - &gt;要编译的源文件

执行编译的文件,只需输入

即可
./foo

答案 6 :(得分:0)

  1. 要编译C ++代码,请使用:-

g ++ file_name.cpp -o可执行文件名

(i)-o选项用于显示代码中的错误 (ii)如果code_file中没有错误,则它将生成 可执行文件。

  1. 现在执行生成的可执行文件:

./可执行文件名

答案 7 :(得分:0)

对于简单的测试项目,g++make独立版本是很好的选择,正如已经回答的那样:

g++ -o hi hi.cpp

make hi

但是,对于实际项目,需要使用项目经理。在我撰写此答案时,最常用和开放源代码的是cmake(替代方法可能是QT qmake)。

以下是一个简单的CMake示例:

确保在Linux发行版cmakeapt-get install cmake上安装了yum install cmake

与源文件CMakeLists.txt一起创建文件hi.cpp(名称很重要)

project("hi")

add_executable( hi hi.cpp )

然后编译并运行为:

cmake .
make
./hi

这使项目可以轻松地通过库,源等进行缩放使大多数IDE正确理解项目(大多数IDE原生接受CMake,例如kdevelop,qtCreator等。)

Example of CMake integration with Qt-Creator

如果将来决定将软件移植到其他平台,还可以从CMake生成Visual-Studio或XCode项目。

cmake -G Xcode . #will generate `hi.xcodeproj` you can load on macOS