gcc编译c++文件

2023-05-16

gcc是编译c语言的,默认情况下,如果直接编译c++程序,会报错:

[root@server demo2]# ls
hello.cpp
[root@server demo2]# cat hello.cpp 
#include <iostream>
using namespace std;
int main(){
  cout<<"hello,c++"<<endl;
  return 0;
}
[root@server demo2]# gcc -o hello hello.cpp 
/tmp/ccAa6oYP.o: In function `main':
hello.cpp:(.text+0xa): undefined reference to `std::cout'
hello.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> >&, char const*)'
hello.cpp:(.text+0x14): 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> >&)'
hello.cpp:(.text+0x1c): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
/tmp/ccAa6oYP.o: In function `__static_initialization_and_destruction_0(int, int)':
hello.cpp:(.text+0x4a): undefined reference to `std::ios_base::Init::Init()'
hello.cpp:(.text+0x59): undefined reference to `std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status

我们可以通过增加参数-lstdc++来编译,结果如下:

[root@server demo2]# gcc -o hello hello.cpp -lstdc++
[root@server demo2]# ls
hello  hello.cpp
[root@server demo2]# ./hello 
hello,c++
[root@server demo2]# 

如果编译c++程序,可以直接通过g++命令来编译,如下:

可以使用更简单的,直接g++ hello.cpp,这样生成的文件就是a.out

[root@server demo2]# g++ hello.cpp 
[root@server demo2]# ls
a.out  hello.cpp
[root@server demo2]# ./a.out 
hello,c++
[root@server demo2]# 

多个文件编译:准备circle.h,circle.cpp,main.cpp

circle.h

#ifndef CIRCLE_H
#define CIRCLE_H
class Circle{
  private:
    double r;
  public:
    Circle();
    Circle(double r);
    double area();
};
#endif

circle.cpp

#include "circle.h"
Circle::Circle(){
   this->r = 5;
}

Circle::Circle(double r){
   this->r = r;
}

double Circle::area(){
   return 3.14*r*r;
}

main.cpp

#include <iostream>
#include "circle.h"
using namespace std;

int main(){
   Circle c(3);
   cout<<"area => "<<c.area()<<endl;
   return 0;
}

多个文件编译,使用gcc编译,就类似这样:gcc -o main main.cpp circle.cpp -lstdc++,该命令编译中,文件不能带上circle.h头文件,否则会报错。

[root@server demo1]# ls
circle.cpp  circle.h  main.cpp
[root@server demo1]# gcc -o main main.cpp circle.cpp -lstdc++
[root@server demo1]# ls
circle.cpp  circle.h  main  main.cpp
[root@server demo1]# ./main
area => 28.26
[root@server demo1]# 

使用g++编译:可以带上头文件circle.h

[root@server demo1]# ls
circle.cpp  circle.h  main.cpp
[root@server demo1]# g++ -o main2 main.cpp circle.h circle.cpp
[root@server demo1]# ls
circle.cpp  circle.h  main2  main.cpp
[root@server demo1]# ./main2 
area => 28.26
[root@server demo1]# 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gcc编译c++文件 的相关文章

随机推荐

  • KafkaOffsetMonitor-assembly-0.2.1.jar使用遇到的问题

    最近使用了一下最新版的kafka监控工具 xff0c 按照以前的方式运行 xff0c 能够打开首页 xff0c 但是首页什么内容也没有 xff0c 感觉像是出了什么幺蛾子 xff0c 浏览器右键打开开发者模式 xff0c 发现三个angul
  • springboot+jpa+mongodb开发实战

    mongodb作为nosql数据库的一种 xff0c 在javaee开发中也越来越受到重视 xff0c 这里介绍springboot 43 jpa 43 mongodb开发过程 1 新建maven工程 xff0c 引入springboot和
  • hive查询结果保存到本地

    使用hive查询 xff0c 结果我们通常会保存到hdfs xff0c 然后通过sqoop导出工具 xff0c 将其导出到外部mysql或者其他地方 xff0c 但是有时候查询结果就是一个数据 xff0c 比如count 的结果 xff0c
  • spring-data-mongodb两种实现方式对比

    之前介绍过springboot和mongodb整合 xff0c 使用了spring data mongodb xff0c 因为springboot注解和自动化配置 xff0c 我们少了很多配置 xff0c 这里介绍spring整合mongo
  • shell脚本获取昨天今天本周周一本周周日本月第一天本月最后一天

    偶尔在linux上需要做脚本 xff0c 并设置脚本按照日期来计算相关数据 xff0c 这时候就涉及到日期的获取 xff0c 这里介绍简单的几个重要日期的获取 xff0c 分别是昨天 xff0c 今天是本周的第几天 xff0c 本周周一 x
  • 4399游戏存档的那些事儿

    4399游戏存档的那些事儿 本文旨在简单分析4399游戏存取档的加解密 工具在吾爱都有提供下载 工具名称用途ffdec反编译swf文件charles抓包开发IDE 随意 存档加解密复现 一 抓包 随意找一个支持存档的游戏进行抓包 这里不分析
  • mongodb数据库从入门到精通

    mongodb数据库作为nosql的一种 xff0c 目前在nosql数据库中的应用排名几乎是数一数二 开发中也会越来越受到重视 xff0c 这里介绍命令行下操作mongo数据库的相关内容 基础部分 连接数据库 xff1a 一般连接数据库
  • linux上安装svn

    1 安装 yum install subversion 2 测试是否成功及查看版本 svnserve version 3 创建目录 makedir p home hadoop workspace svn pro 4 创建svn目录 svna
  • java通过jedis操作redis(从JedisPool到JedisCluster)

    redis作为一个缓存数据库 xff0c 在绝大多数java项目开发中是必须使用的 xff0c 在web项目中 xff0c 直接配合spring redis xff0c 各种配置都直接在spring配置文件中做了 xff0c 一般都是使用r
  • Lua redis() command arguments must be strings or integers

    如题 xff0c 在linux命令行下运行lua脚本操作redis xff0c 提示错误 root 64 server script cat set lua return redis call 39 set 39 KEYS 1 ARGV 1
  • git命令行下回退一个文件到上一个版本

    git版本控制在ide中 xff0c 很方便的回退一个文件 xff0c 只需要git gt revert就可以了 但是有时候 xff0c 我们会在命令行下操作git 比如部署到生产环境的时候 xff0c 我们不想打包 xff0c 而是想通过
  • 让web页面页脚footer固定在页面底部

    有时候 xff0c 我们发现很多页面内容不多的时候 xff0c 页面底部内容飘到了中间 xff1a 这个页面底部没有固定 xff0c 结果 xff0c 一个前端工程师是无法接受这样的结果的 这里介绍一种通用的解决办法 xff0c 让页面底部
  • 图文演示第一个nodejs实例

    学习nodejs xff0c 第一个项目就是如何构建一个简单的http服务 xff0c 然后通过浏览器输入访问地址访问 xff0c 打印一个简单的helloworld 这里直接入手 xff0c 首先确保机器上已经安装了node npm 以及
  • 构建http服务的几种方式

    做前端开发 xff0c 页面可以通过浏览器打开访问 xff0c 但是异步请求这里 xff0c 直接通过浏览器就不行了 xff0c 即便是访问的本地json资源 xff0c ajax也无能为力 另外 xff0c 如angularjs vue涉
  • nodejs+Express开发第一个web应用

    express是nodejs开发中最常用的一个http服务框架 xff0c 通过他可以很方便的构建http服务 另外他本身还提供了路由功能 xff0c 就是对请求的路径做区分 xff0c 分别对应后台不同的请求 这里介绍如何通过expres
  • angularjs路由ui-router示例

    angularjs默认提供的路由是angular route min js提供的 xff0c 这里介绍一个开源的 xff0c 基于angularjs实现的ui router路由 思路是类似的 页面不再使用ng view来指定一个模板子页面
  • DZNEmptyDataSet框架简介

    给大家推荐一个设置页面加载失败时显示加载失败等的框架 下载地址 DZNEmptyDataSet https github com dzenbot DZNEmptyDataSet 上效果 首先在你的ViewController里面导入 imp
  • 使用jQuery中Deferred异步对象构建顺序执行队列

    在前面 xff0c 有一篇文章介绍了jQuery的异步对象Deferred xff0c 通过他 xff0c 我们可以实现一些操作比如回调函数在异步操作 xff08 耗时 xff09 完成之后再执行 比如这样的场景 xff0c 我们在编辑页面
  • nodejs路由之代码分离

    nodejs提供了路由功能 xff0c 解决客户端各类请求对应的处理问题 xff0c 相当于springboot开发各个controller对应的方法 xff0c nodejs提供的路由 xff0c 也支持各种方法 xff1a get po
  • gcc编译c++文件

    gcc是编译c语言的 xff0c 默认情况下 xff0c 如果直接编译c 43 43 程序 xff0c 会报错 xff1a root 64 server demo2 ls hello cpp root 64 server demo2 cat