当前位置: 首页 > news >正文

ubuntu编写makefile编译c++程序

常见的编译工具

  • gcc/g++
  • visual c++
  • clang

编译一个简单的程序
main.cpp

#include <iostream>int main()
{std::cout << "hello world" << std::endl;return 0;
}

gcc 编译
源文件(.cpp)编译生成目标文件(.o)

gcc -c main.cpp -o main.o

gcc 链接
目标文件(.o)链接生成可执行文件

gcc main.o -o main

报错

root@31135f61935f:~/hello# gcc main.o -o main
/tmp/ccVubJEp.o: In function `main':
main.cpp:(.text+0xa): undefined reference to `std::cout'
main.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*)'
main.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> >&)'
main.cpp:(.text+0x1c): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
/tmp/ccVubJEp.o: In function `__static_initialization_and_destruction_0(int, int)':
main.cpp:(.text+0x4a): undefined reference to `std::ios_base::Init::Init()'
main.cpp:(.text+0x59): undefined reference to `std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status

解决方法:
方式一

gcc -c main.cpp -o main.o
gcc main.o -o main -lstdc++

两条命令合并

gcc main.cpp -o main -lstdc++

方式二

g++ -c main.cpp -o main.o
g++ main.o -o main

两条命令合并

g++ main.cpp -o main

c++ 编译流程

  1. 预处理
  2. 编译
  3. 汇编
  4. 链接
    在这里插入图片描述
    预处理
    把 #include 语句以及一些宏插入程序文本中,得到 *.i 文件。
g++ -E main.cpp -o main.i

编译
将文本文件 *.i 文件编译成文本文件 *.s 的汇编语言程序。

g++ -S main.i -o main.s

汇编
将 *.s 翻译成机器语言的二进制指令,并打包成一种叫做可重定位目标程序的格式,并将结果保存在 *.o 文件中。

g++ -c main.s -o main.o

链接
合并全部 *.o 文件,得到可执行文件。

g++ main.o -o main

预处理、编译、汇编合并

g++ -c main.cpp -o main.o
g++ main.o -o main

预处理、编译、汇编、链接合并

g++ main.cpp -o main

参考视频:

如何编译 C++ 程序:轻松搞定 Makefile

参考链接:
如何编译 C++ 程序:轻松搞定 Makefile

相关文章:

ubuntu编写makefile编译c++程序

常见的编译工具 gcc/gvisual cclang 编译一个简单的程序 main.cpp #include <iostream>int main() {std::cout << "hello world" << std::endl;return 0; }gcc 编译 源文件&#xff08;.cpp&#xff09;编译生成目标文件&#xff08;.o&#xf…...

详解COCO数据格式的json文件内容

coco标注格式的json文件详解 # coco_json结构示意 {info:info,licenses:[licenses],images:[image],annotations:[annotation] } 1. **images**&#xff1a;这个部分包含了所有图像的信息。每个图像都表示为一个字典&#xff0c;包含以下字段&#xff1a; - id&#xff1a…...

2023.10.12

#include <iostream>using namespace std; //定义动物类 class Animal { private:string name; public:Animal(){}Animal(string name):name(name){}~Animal(){}//定义虚函数virtual void perform()0;//表演的节目void show(){cout << "Please enjoy the spec…...

antd Form shouldUpdate 关联展示 form 数组赋值

form 数组中嵌套数值更新 注意&#xff1a;数组是引用类型 项目需求&#xff0c;表单中包含多个产品信息&#xff0c;使用form.list 数组嵌套&#xff0c;提货方式如果是邮寄展示地址&#xff0c;如果是自提&#xff0c;需要在该条目中增加两项 代码如下&#xff1a;// An hi…...

vue实现一个简单导航栏

Vue之简单导航栏 在vue中&#xff0c;想要实现导航栏的功能&#xff0c;除了用传统的a标签以外&#xff0c;还可以使用路由——vue-router来实现&#xff0c;前端小白在此记录一下学习过程&#xff08;默认已经搭建好vue的脚手架环境&#xff09;&#xff1a; 建立项目并安装…...

每日leetcode_LCP01猜数字

每日leetcode_LCP01猜数字 记录自己的成长&#xff0c;加油。 题目出处&#xff1a;LCP 01. 猜数字 - 力扣&#xff08;LeetCode&#xff09; 题目 解题 class Solution {public int game(int[] guess, int[] answer) {int count 0;for (int i 0 ; i< guess.length; i){…...

接口自动化测试_L1

目录&#xff1a; 接口自动化测试框架介绍 接口测试场景自动化测试场景接口测试在分层测试中的位置接口自动化测试与 Web/App 自动化测试对比接口自动化测试与 Web/App 自动化测试对比接口测试工具类型为什么推荐 RequestsRequests 优势Requests 环境准备接口请求方法接口请求…...

Windows提权

1. MySQL提权 1.1 UDF提权 udf ‘user defined function’&#xff0c;即’用户自定义函数’。是通过添加新函数&#xff0c;对MYSQL的功能进行扩充 1、如何获得udf文件 2、将文件放到哪才能让mysql承认这个函数 3、函数功能 4、为什么这东西能提权(自定义函数指令是直接…...

香港服务器的优势?

香港服务器作为近年来国内站长建站使用最为频繁的服务器之一&#xff0c;香港服务器是不需要备案的&#xff0c;而且相对于众多国内服务器 来说&#xff0c;的确是有诸多优势&#xff0c;下面就来具体说下选择香港服务器的优势&#xff1a; 1、访问速度快 搭建网站&#xff0c;…...

关于开展2023年度光明科学城出站博士后生活资助申报工作的通知

各相关单位&#xff1a; 根据《光明区关于实施光明科学城“人才高地计划”的若干措施》&#xff08;深光发〔2022〕1号&#xff09;和《光明科学城青年科技人才培育专项行动方案》&#xff08;深光人才〔2022〕2号&#xff09;有关规定&#xff0c;现就2023年度光明科学城出站博…...

“.NET视频总结:认识框架的结构和组件,掌握开发工具的奥妙“

目录 第一单元&#xff1a;二十一世纪程序执行 背景: 总结&#xff1a; 第二单元:对象导向与类别设计 背景: 总结&#xff1a; 第三单元&#xff1a;使用类别与基底类别库 背景: 总结: 第四单元:Windows开发程序 背景: 总结: 第五单元:防护式程序设计 背景: 总结…...

STM32 CubeMX PWM三种模式(互补,死区互补,普通)(HAL库)

STM32 CubeMX PWM两种模式&#xff08;HAL库&#xff09; STM32 CubeMX STM32 CubeMX PWM两种模式&#xff08;HAL库&#xff09;一、互补对称输出STM32 CubeMX设置代码部分 二、带死区互补模式STM32 CubeMX设置代码 三、普通模式STM32 CubeMX设置代码部分 总结 一、互补对称输…...

Linux系统导入导出docker容器的sql数据

Linux系统导入导出docker容器的sql数据 一 要从Docker容器中将数据库导出到本地 确保您已经安装了Docker&#xff0c;并且已经运行了包含数据库的Docker容器。 检查容器中运行的数据库服务的名称或容器ID。您可以使用命令 docker ps 来列出正在运行的容器和相关信息。 使用…...

SpringBoot之使用Redis和注解实现接口幂等性

文章目录 1 接口幂等性1.1 概念1.2 实现思路1.3 代码实现1.3.1 pom1.3.2 JedisUtil1.3.3 自定义注解ApiIdempotent1.3.4 ApiIdempotentInterceptor拦截器1.3.5 TokenServiceImpl1.3.6 TestApplication 1.4 测试验证1.4.1 获取token的控制器TokenController1.4.2 TestController…...

《3D 数学基础》几何检测-相交性检测

目录 1. 2D直线相交 2. 3D射线相交点 3. 射线和平面的交点 4. 3个平面的交点 5. 射线和圆或者球交点 6. 两个圆或者球是否相交 7. 球和平面的相交性检测 8. 射线和AABB的相交性&#xff08;13.17&#xff09; 9. 射线和三角形的相交性&#xff08;13.16&#xff09; …...

文字与视频结合效果

效果展示 CSS 知识点 mix-blend-mode 属性的运用 实现整体页面布局 <section class"sec"><video autoplay muted loop><source src"./video.mp4" type"video/mp4" /></video><h2>Run</h2><!-- 用于切…...

大数据Doris(九):配置BE步骤

文章目录 配置BE步骤 一、配置be节点...

BuyVM 纽约 VPS 测评

description: 发布于 2023-07-05 BuyVM 纽约 VPS 测评 产品链接&#xff1a;https://my.frantech.ca/cart.php?gid38 G口不限流量&#xff0c;抗一般投诉&#xff0c;不抗版权投诉。 CPU很快&#xff0c;硬盘不错。 无大陆优化&#xff0c;但大陆连通性很不错&#xff0c;…...

H3C交换机的40G堆叠线 ,可以插在普通光口做堆叠吗?

环境&#xff1a; S6520X-24ST-SI交换机 H3C LSWM1QSTK2万兆40G堆叠线QSFP 问题描述&#xff1a; H3C交换机的40G堆叠线 &#xff0c;可以插在普通光口做堆叠吗&#xff1f; 解答&#xff1a; 1.H3C交换机的40G堆叠线通常是用于连接堆叠模块或堆叠端口的。这些堆叠线通常使…...

【Java 进阶篇】JavaScript三元运算符详解

JavaScript是一门广泛用于前端和后端开发的编程语言&#xff0c;具备强大的表达式和运算符。本篇博客将重点介绍JavaScript中的三元运算符&#xff0c;解释其语法、用法和示例。如果您是JavaScript初学者&#xff0c;或者希望更深入了解这门语言的运算符&#xff0c;那么这篇博…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

问题&#xff1a; pgsql数据库通过备份数据库文件进行还原时&#xff0c;如果表中有自增序列&#xff0c;还原后可能会出现重复的序列&#xff0c;此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”&#xff0c;…...