如何在 Linux 中编译 ac 程序?

新手上路,请多包涵

我制作了一个文件 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 ~]$

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

原文由 Chankey Pathak 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 463
2 个回答

使用 g++

 g++ -o hi hi.cpp

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

原文由 Jesus Ramos 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于一个简单的 hello-world 项目,使用 g++ 命令直接调用编译器或创建一个 make 文件是很好的选择,正如已经回答的那样:

 g++ -o hi hi.cpp

或者

# After creating the makefile
make hi


然而,对于严肃的项目,需要使用项目经理。在我写这个答案时,最常用和开源的是 cmake (另一种可能是 QT qmake )。

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

确保在您的 Linux 发行版上安装了 cmake apt-get install cmakeyum install cmake

创建一个文件 CMakeLists.txt (名称很重要)以及您的源 hi.cpp

 project("hi")

add_executable( hi hi.cpp )

然后编译并运行为:

 cmake -B <path_to_build_folder> -S <path_to_source_folder>
cmake --build <path_to_build_folder>
cd <path_to_build_folder>; ./hi

这允许项目使用库、源、单元测试等轻松 扩展。它还 使大多数 IDE 能够正确理解项目(大多数 IDE 原生接受 CMake,如 kdevelop、qtCreator 等。)

CMake 与 Qt-Creator 集成的示例

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

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

原文由 Adrian Maire 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题