Linux编译C文件

2023-05-16

熟悉了Windows平台下编译一个C++工程后,你是否会提出这样一个问题:在Linux平台下又如何编译一个C++工程呢?


希望本文能给正在学习或想学习Linux C++开发的你起到抛砖引玉的作用。

首先,你必须有一个Linux开发环境,这样才能进行C++开发。笔者用的是安装在虚拟机中的Ubuntu 9.04,Ubuntu操作系统是没带C++编译器g++。在连网的情况下,在终端中使用root超级用户权限输入以下命令:
sudo apt-get install g++
并回车即可安装C++编译器g++。

安装完毕,即可开始新建我们的一个C++工程了。下面以一个hello工程为例,简单地介绍如何编译一个 C++工程。

登录Linux系统,打开终端,在当前目录下使用mkdir命令新建一个hello的目录;然后使用cd hello进入hello目录中,并使用vi工具新建hello.h、hello.cpp、main.cpp、makefile四个文件。四个文件的内容分别如下:
1. hello.h文件

#ifndef HELLO_H_
#define HELLO_H_
class Hello {
public:
void print();
};
#endif

2. hello.cpp文件
#include "hello.h"
#include <iostream>
using namespace std;
void Hello::print() {

 
      cout<<"Hello, welcome to Redhat Linux os!"<<endl;
}

3. main.cpp文件
#include "hello.h"
#include <iostream>
using namespace std;
int main() {
     Hello h;
     h.print();
     return 0;
}
注意:这三个文件要以空白行结束,否则编译时会有警告信息。

4. makefile文件
# this is a makefile of the c++ project hello
# the standard c++ compiler in the Redhat linux is g++
# written by young on June 27th, 2009
      TARGET = .
          CC = g++
      CFLAGS = -g
      CFLAGC = -c
      
      MAINC = main.cpp
      HELLO = hello.cpp
        OBJ = hello.o
      
      INCLUDE = -I$(TARGET)
         EXEC = $(TARGET)/main
      
all: $(EXEC)
$(EXEC): $(OBJ) $(MAINC)
$(CC) $(CFLAGS) $(OBJ) $(MAINC) $(INCLUDE) -o $@
rm -f $(OBJ)
@echo "<<<<<< $@ is created successfully! >>>>>>"
$(OBJ): $(HELLO)
$(CC) $(CFLAGC) $(HELLO) -o $@
clean:
rm -f $(EXEC)
注意: makefile文件中的命令行(红色字体)一定要以Tab建开头,否则编译通不过。

写好makefile文件后,即可编译工程。在终端中输入make命令,回车后将显示如下信息:
g++ -c hello.cpp -o hello.o
g++ -g hello.o main.cpp -I. -o main
rm -f hello.o
<<<<<< main is created successfully! >>>>>>
这些信息说明工程已被正确编译,当前目录下将生成一个main的可执行文件。
同样,你也可以不使用makefile文件,而直接在终端上输入以下两行命令:
g++ -c hello.cpp -o hello.o
g++ -g hello.o main.cpp -I. -o main
也可以编译这个工程。

使用ls -l命令查看当前目录下的所有文件,确实有一个main文件。
在终端中输入./main,即可运行程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux编译C文件 的相关文章

  • 如何真正释放 Linux 中的大页面以供新进程使用?

    真的找不到太多关于此的信息 希望有人可以提供帮助 我正在假脱机使用 100GB java 堆作为大数据缓存 为了避免与文件系统缓存等内容发生冲突 并且因为它通常性能更好 我将其分配在大页面中 我保留了 51 200 x 2MB 大页面 一切
  • 是否有我可以运行的操作系统命令来确定是否在基于 Xen 的虚拟机内运行

    我可以在基于 Xen 的虚拟机中运行一个操作系统命令来告诉我它是一个虚拟机而不是物理机 我听说内核对此有一些自我意识智能 例如就像 ps 输出中的额外列之类的 我知道 vmstat 提供了 st 列 但我在运行 Linux 内核 2 6 1
  • 如何使用 tmuxinator 在 tmux 中拆分水平窗格内的两个垂直窗格

    目前我的 tmuxinator yml 文件中有这个 windows editor layout main horizontal panes vim server rails s 这给了我两个窗口 一个用于编辑器 另一个用于服务器 在编辑器
  • 如何“grep”连续流?

    可以用吗grep在连续的流中 我的意思是有点tail f
  • Linux下的C#,Process.Start()异常“没有这样的文件或目录”

    我在使用 Process 类调用程序来启动程序时遇到问题 可执行文件的层次结构位于 bin 目录下 而当前工作目录需要位于 lib 目录下 project bin a out this is what I need to call lib
  • Snap-confine 具有提升的权限,并且不受限制,但应该受到限制。拒绝继续避免权限升级攻击

    我已经使用 snap 一段时间了 但最近升级后 当我尝试打开任何应用程序时 出现此错误 Snap confine has elevated permissions and is not confined but should be Refu
  • bash双括号问题

    我对 bash 脚本非常陌生 在使用双括号时遇到了问题 我似乎无法让它们在 Ubuntu Server 11 10 中工作 我的下面的脚本位于 if test sh 中 bin bash if 14 14 then echo FOO fi
  • 跟踪 pthread 调度

    我想做的是创建某种图表 详细说明 Linux 中 两个 线程的执行情况 我不需要查看线程的作用 只需查看它们何时被安排以及持续多长时间 基本上是一条时间线 在过去的几个小时里 我一直在互联网上搜索跟踪 pthread 调度的方法 不幸的是
  • 如何删除树莓派的相机预览

    我在我的 raspberryPi 上安装了 SimpleCv 并安装了用于使用相机板的驱动程序 uv4l 驱动程序 现在我想使用它 当我在 simpleCV shell Camera 0 getImage save foo jpg 上键入时
  • 测试linux下磁盘空间不足

    我有一个程序 当写入某个文件的磁盘空间不足时 该程序可能会死掉 我不确定是否是这种情况 我想运行它并查看 但我的测试服务器不会很快耗尽空间 有什么办法可以嘲笑这种行为吗 看起来没有任何方法可以在 Ubuntu 中设置文件夹 文件大小限制 并
  • 变量作为 bash 数组索引?

    bin bash set x array counter 0 array value 1 array 0 0 0 for number in array do array array counter array value array co
  • 使用netcat将unix套接字传输到tcp套接字

    我正在尝试使用以下命令将 unix 套接字公开为 tcp 套接字 nc lkv 44444 nc Uv var run docker sock 当我尝试访问时localhost 44444 containers json从浏览器中 它不会加
  • ARM 系统调用的接口是什么?它在 Linux 内核中的何处定义?

    我读过有关 Linux 中的系统调用的内容 并且到处都给出了有关 x86 架构的描述 0x80中断和SYSENTER 但我无法追踪 ARM 架构中系统调用的文件和进程 任何人都可以帮忙吗 我知道的几个相关文件是 arch arm kerne
  • 在 Ubuntu 上纯粹通过 bash 脚本安装 mysql 5.7

    我想要一个无需任何手动输入即可安装 MySQL 5 7 实例的 bash 脚本 我正在关注数字海洋教程 https www digitalocean com community tutorials how to install mysql
  • 是否有可能通过 mmap 匿名内存“打孔”?

    考虑一个使用大量大致页面大小的内存区域 例如 64 kB 左右 的程序 每个内存区域的寿命都相当短暂 在我的特定情况下 这些是绿色线程的替代堆栈 如何最好地分配这些区域 以便一旦该区域不再使用 它 们的页面可以返回到内核 天真的解决方案显然
  • 使用脚本自动输入 SSH 密码

    我需要创建一个自动向 OpenSSH 输入密码的脚本ssh client 假设我需要通过 SSH 进入myname somehost用密码a1234b 我已经尝试过 bin myssh sh ssh myname somehost a123
  • 如何在 Linux x86_64 上模拟 iret

    我正在编写一个基于 Intel VT 的调试器 由于当 NMI Exiting 1 时 iret 指令在 vmx guest 中的性能发生了变化 所以我应该自己处理vmx主机中的NMI 否则 guest会出现nmi可重入错误 我查了英特尔手
  • 我应该使用哪个 Linux 发行版作为 Xen 主机? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我为家庭办公室订购了一台服务器 我想用 Xen 对其进行分区 我认为这将使事情保持干净并且更容易维护 我将运行 MySQL PostgreSQL
  • 如何从 Linux 的 shell 中删除所有以 ._ 开头的文件?

    确实如标题所示 我已将许多文件从 Mac 复制到 Raspberry Pi 这导致了许多以前缀开头的多余文件 我想删除以以下开头的文件夹中的每个文件 我该怎么做 尝试类似的方法 cd path to directory rm rf 或者 如
  • 是否从页面缓存中的脏页面进行文件读取?

    当字节写入文件时 内核不会立即将这些字节写入磁盘 而是将这些字节存储在页缓存中的脏页中 回写缓存 问题是 如果在脏页刷新到磁盘之前发出文件读取 则将从缓存中的脏页提供字节 还是首先将脏页刷新到磁盘 然后进行磁盘读取以提供字节 将它们存储在进

随机推荐

  • ROS面试题汇总

    1 ROS中订阅 xff08 Subscribe xff09 最新消息以及消息队列相关问题 机器人应用中难免会遇到运算起来很费时间的操作 xff0c 比如图像的特征提取 点云的匹配等等 有时候 xff0c 不可避免地 xff0c 我们需要在
  • VINS-Mono后端知识点汇总

    processImage xff1a 每帧都干了什么 谁是Featureanager xff1a 维护路标点与图像 后端干了啥 xff1a 详解因子图 xff08 视觉的因子图 IMU的因子图 因子图和Hessian矩阵的关系 xff09
  • VINS-Mono学习(二)——松耦合初始化

    初始化 xff1a 如何当好一个红娘 xff1f 图解SfM 视觉和IMU的羁绊 怎么知道发生了闭环 xff1f 位姿图优化与滑窗优化都为哪般 xff1f 闭环优化 xff1a 拉扯橡皮条 整体初始化流程如下 xff1a 1 SFM纯视觉估
  • VINS知识点汇总

    0 总体框架 包括5个部分 xff1a 数据预处理 初始化 后端非线性优化 闭环检测 位姿图优化 图片来自大佬博客 xff1a https blog csdn net try again later article details 1048
  • 语义SLAM综述

    1 摘要 SLAM技术在计算机视觉和机器人领域中占有重要低位 传统的SLAM框架采用了较强的静态世界假设 xff0c 便于分析 大多基于小区域静态环境 在大规模的动态环境下 xff0c 它们大多难以获得较好的性能 xff0c 系统的准确性
  • VINS-Mono学习(三)——基于滑动窗口的VIO紧耦合后端非线性优化

    nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 初始化后 采用基于滑动窗口的紧耦合单目VIO进行状态估计 首先来看VINS Mono后端的整体思路 nbsp nbsp nbsp nbsp nbsp nbsp
  • VINS-Mono学习(五)——闭环优化4DoF

    这里再重写一边VINS开启的新线程 xff1a 前端图像跟踪后端非线性优化闭环检测闭环优化 闭环优化是跟在闭环检测之后步骤 首先回顾闭环检测的过程 xff1a 1 pose graph node cpp开启process闭环检测线程 xff
  • C语言预定义跟踪调试

    标准C语言预处理要求定义某些对象宏 xff0c 每个预定义宏的名称一两个下划线字符开头和结尾 xff0c 这些预定义宏不能被取消定义 xff08 undef xff09 或由编程人员重新定义 下面预定义宏表 xff0c 被我抄了下来 LIN
  • 链式存储

    1 特点 线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素 xff0c 这组存储单元可以是连续的 xff0c 也可以是不连续的这就意味着 xff0c 这些数据元素可以存在内存未被占用的任意位置 2 结点是什么 在数据结构
  • ROS驱动包无法连接A2M7雷达解决办法

    我在使用A2M7雷达时 xff0c 波特率是256000 xff0c 之前驱动跑A2M6和A2M8雷达时 xff0c 波特率115200 xff0c 都可以使用 xff0c 现在跑M7就不行 xff0c 显示无法绑定到串口 xff0c 刚开
  • FreeRTOS prvTaskExitError 创建任务错误

    文件port c prvTaskExitError 任务退出错误 xff0c 一个可能在任务里面写了return xff0c 另一个可能任务切换退出问题 xff0c 入栈和出栈的时候出了问题 1 static void prvTaskExi
  • Ubuntu18.04下VSCode环境编写Linux相关驱动程序时出现未定义标识符问题

    Ubuntu18 04下VSCode环境编写Linux相关驱动程序时出现未定义标识符问题 编译Linux相关驱动程序时 xff0c 出现未定义标识符问题 但是ctrl 43 鼠标左键可以找到相关定义 这是因为没有加载对应Linux内核中头文
  • postman基础使用教程

    Postman教程大全 简书 推荐一款接口测试工具 xff01 POSTMAN xff01 简单来说 xff0c 四个词 xff0c 简单实用大方美观 xff01 Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插
  • Make、Makefile、CMake和CMakeLists

    一 Make 在 认识编译器和C C 43 43 编译 一文中介绍过 xff0c 一个 c cpp 文件从源文件到目标文件的过程叫做编译 xff0c 但是一个项目中不可能只存在一个文件 xff0c 这就涉及到多个文件的编译问题 xff0c
  • C++将类写在头文件中

    比如有个类ABC要在main cpp内使用 xff0c 创建两个文件 ABC h xff0c ABC cpp 把类的声明都写在h里面 xff0c 方法的实现写在cpp里面 xff0c 然后在main cpp内 include ABC h x
  • ubuntu搭建一个简单的http服务器

    使用ubuntu搭建一个简单的http服务器 安装apache2 1 sudo apt get update 2 sudo apt get install apache2 安装成功后 xff0c 再 etc apache2目录可见其配置文件
  • Postman操作基本教程

    一 xff1a 基本介绍 xff1a Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件 Postman背景介绍 用户在开发或者调试网络程序或者是网页B S模式的程序的时候是需要一些方法来跟踪网页请求的 xff0
  • ROS中rosserial通讯协议初探

    ROS中rosserial通讯协议初探 串行的通讯 xff0c 我们用串口模拟下通讯图 官方 http wiki ros org rosserial rosserial 1概述 标准ROS序列化message的协议 xff0c 可以让一个字
  • 使用cmake交叉编译arm平台so

    使用cmake交叉编译arm平台so 众所周知 xff0c androidStudio可以编译apk及so 具体配置此处不一一介绍 xff0c 但对于需要经常编译不同项目的小编来说 xff0c 太过重量级了 xff0c 假如在编译系统下并没
  • Linux编译C文件

    熟悉了Windows平台下编译一个C 43 43 工程后 xff0c 你是否会提出这样一个问题 xff1a 在Linux平台下又如何编译一个C 43 43 工程呢 xff1f 希望本文能给正在学习或想学习Linux C 43 43 开发的你