Ubuntu C++ 编译问题详解

举报
Linux猿 发表于 2021/12/06 22:47:18 2021/12/06
【摘要】 CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊! 欢迎小伙伴们点赞👍、收藏⭐、留言💬

🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


一、问题描述

今天在使用 Ubuntu 中的 gcc 编译器编译 C++ 代码的时候,突然出现了错误,之前好像一直没有问题,编译的错误如下所示:

linuxy@linuxy:~$ gcc -o main main.cpp
/usr/bin/ld: /tmp/ccB5m3UO.o: in function `__static_initialization_and_destruction_0(int, int)':
main.cpp:(.text+0x38): undefined reference to `std::ios_base::Init::Init()'
/usr/bin/ld: main.cpp:(.text+0x4d): undefined reference to `std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status
linuxy@linuxy:~$

二、解决方法

这个问题主要是链接库出现了问题,这个问题解决方法有多种,下面就来看一下,如下所示:

(1)使用 g++ 代替 gcc,如下所示:

linuxy@linuxy:~$ g++ -o main main.cpp

(2)添加 -lstdc++ 库引用,如下所示:

linuxy@linuxy:~$ gcc -o main main.cpp -lstdc++

三、gcc 和 g++ 的区别

gcc 在编译 c++ 的代码时,gcc 不能自动与 c++ 的库进行链接,需要指定链接的库,所以会导致上面的问题。

另外,g++ 在编译 c 语言程序时,实际上会调用 gcc 进行编译。在编译 C/C++ 代码时,可以在编译的时候直接使用 g++ 进行编译。


CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

欢迎小伙伴们点赞👍、收藏⭐、留言💬


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。