基于VS2019 C++的跨平台(Linux)开发——引入

2023-11-08

一、前言

先声明我的服务器是Ubuntu16.04,由标题可知,我的开发工具采用Visual Studio2019,使用c++语言来实现windows-linux的跨平台开发。

二、关于跨平台

1. 什么是跨平台?

由百度百科可知,跨平台概念是软件开发中一个重要的概念,即不依赖于操作系统,也不依赖硬件环境。一个操作系统下开发的应用,放到另一个操作系统下依然可以运行。

跨平台的定义就是指程序语言、软件或硬件设备可以在多种作业系统或不同硬件架构的电脑上运作。
简单来说,本文的跨平台就是,一份代码,在Windows上可以编译、运行,在Linux上也可以编译和运行,则称此代码是可以跨平台的。

2. 特点

  • 同一份代码,无需改动
  • 运行结果相同

3. 跨平台代码的要求

①尽量使用标准的函数、类型、语法等

如,ANSI C/STL,是各个平台都支持的函数;

char/short/int/double/float,这些类型各平台都支持。

②尽量避免平台相关的类型、函数、语法出现二义性

比如,有的编译器认为以下这样重复定义了变量i

for(int i = 0; i < 3; i++){}

for(int i = 0; i < 6; i++){}

4、跨平台开发

大家知道,以往通过打断点基本是用来debug调试。在VS2019里面的断点打在哪一行,那一行就没有运行,意味着return 没有执行,整个程序就没有结束,也就能打印出cout打印的结果。以前一般都是在自己的操作系统下自己开一个应用程序,写完代码自己编译生成东西运行(本地方式)。

进入跨平台开发后, 运行后把工程生成在ubuntu系统下,这里解释一下,也就是在windows上面的vs的工作目录下其实只有.cpp文件,没有编译生成的东西;进入到root权限下ubuntu系统中,打开home的projects文件夹会发现编译运行生成的工程文件(包括cpp和bin(可执行)文件夹,如下图所示)

所以真正运行是借助ubuntu系统运行的,即达到了跨平台开发。简单的说跨平台开发就是从windows的VS2019把代码发送到ubuntu,在ubuntu里用c/c++的语法进行编译生成,如果编译出错或出什么什么异常,就借助信号把错误信息发送到windows上的VS2019控制台上显示出来。

以上的这种调试模式也叫做gdb,利用打断点的方式,而不是真正运行的方式。如果想要真正的运行,需要在ubuntu中进入工程文件Debug文件夹下,打开终端输入命令  ./Project1.out 运行,以此达到真正的运行。

以上对跨平台开发以及gdb模式进行了详细的介绍,看不懂没关系,后续学会完再进行回顾一定深有体会。

三、分阶段学习跨平台开发

关于VS2019 C++的跨平台(Linux)开发,后面会继续更新,大致分为三个阶段,目标及内容如下

1、linux内核编程——第一阶段

学习内核函数,打基础

2、网络基础——第二阶段

核心、重难点,特别是IO复用、socket封装、线程封装

3、图像处理——第三阶段(缓冲)

相对容易、有趣,Qt结合OpenCV图像处理,必须用Qt ui节省项目时间

接下来我们进入跨平台开发的学习:首先进行环境搭建

基于VS2019 C++的跨平台(Linux)开发(1.1)——环境搭建


 

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

基于VS2019 C++的跨平台(Linux)开发——引入 的相关文章

随机推荐

  • 现代循环神经网络-门控循环单元(GRU)

    理论 门控隐状态 门控循环单元与普通的循环神经网络之间的关键区别在于 前者支持隐状态的门控 这意味着模型有专门的机制来确定应该何时更新隐状态 以及应该何时重置隐状态 这些机制是可学习的 并且能够解决了上面列出的问题 例如 如果第一个词元非常
  • stream().sorted 排序

    想用stream sorted 做双字段排序 list stream sorted Comparator comparing outObject gt outObject getinnerObject getAttribute revers
  • 责任链模式在项目中的引入使用

    责任链模式是一种设计模式 在责任链模式里 很多对象由每一个对象对其下家的引用而连接起来形成一条链 请求在这个链上传递 直到链上的某一个对象决定处理此请求 发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求 这使得系统可以在不影响客
  • mybatisPlus 枚举类注解 @EnumValue @JsonValue

    1 概要说明 创建枚举类 在需要存储数据库的属性上添加 EnumValue注解 在需要前端展示的属性上添加 JsonValue注解 2 示例实践 public enum SexEnum MAN 1 男 WOMAN 2 女 EnumValue
  • 使用FormData对象

    使用FormData对象 TABLE OF CONTENTS 创建一个FormData对象 使用HTML表单来初始化一个FormData对象 使用FormData对象发送文件 TAGS 文件 利用FormData对象 你可以使用一系列的键值
  • swagger介绍及使用

    文章目录 Swagger 概述 1 maven导入Swagger包 2 配置开启swagger2 3 测试swagger 4 配置swagger信息 5 配置swagger扫描接口 6 swagger分组与接口注释 Swagger 概述 S
  • rockemq创建topic

    sh mqadmin updateTopic n sms pro 007 9876 sms pro 008 9876 c DefaultCluster t smsFrontSmsMq 10 w 4 r 4
  • Java 每日面试题6( BufferReader, 对象序列化)

    BufferReader属于哪种流 主要是用来做什么 里面有哪些方法 BufferReader属于处理流中的缓冲流 可以将读取的内容存在内存里面 比Reader类多了一个readLine 方法 这篇博文提供了BufferReader类的详细
  • 传输层 —— TCP协议

    一 TCP 二 TCP报文段首部格式 1 序号 在一个TCP连接中传送的字节流中的每一个字节都按顺序编号 本字段表示本报文段所发送数据的第一个字节的序号 2 确认号 期望收到对方下一个报文段的第一
  • 【HTML】HTML5给网页音频带来的变化

    HTML HTML5给网页音频带来的变化 引言 内容速递 看了本文您能了解到的知识 音乐播放 相信大家都很熟悉 但是早在之前的音乐播放之前 你的浏览器会问你 是否下载flash插件 然而现在 估计一些年轻的开发者都不用了解flash是啥了
  • Jmeter压测接口全流程详解

    Jmeter压测接口全流程详解 描述 内容包含Jmeter压测软件的安装 环境变量配置 具体实例参数的配置 动态参数构建 元件引入 函数引入 监控插件引入 在京东云上的引用等 第一部分 Jmeter应用下载 一 Jmeter下载 进入官网
  • 一起学nRF51xx 8 -  Time

    前言 Nrf518xx的TIMER有以下几部分组成 nrf51822有三个定时器 time0 1 2 1 计数时钟源 有1M 16M 2种时钟源 2 时钟源分频器 用来设置分频 范围是2的0 9次方 3 定时 计数模式选择 用来配置TIME
  • 百度翻译爬虫-使用execjs库逆向解析百度翻译

    本文目标破解百度翻译接口 抓取翻译结果数据 python3安装execjs方法 pip install pyexecjs 检查页面 使用Chrome浏览器打开百度翻译 观察界面 右键查看源代码 发现密密麻麻全是看不懂JS代码 初步判定为是异
  • CVE-2017-11882漏洞复现

    本文记录一下针对CVE 2017 11882的漏洞复现 0x00 前言 参考backlion师傅的PDF 记录一下这个过程 2017年11月14日 微软发布了11月份的安全补丁更新 其中比较引人关注的莫过于悄然修复了潜伏17年之久的Offi
  • 详解c++---优先级队列和仿函数

    目录标题 什么是仿函数 如何定义一个仿函数 什么是优先级队列 优先级队列的使用 模拟实现priority queue 准备工作 top函数的实现 size函数的实现 empty函数的实现 adjustup函数的实现 push函数的实现 po
  • Opencv图像处理(全)

    文章目录 博主精品专栏导航 备注 以下源码均可运行 不同项目涉及的函数均有详细分析说明 11 图像项目实战 一 银行卡号识别 sort contours resize 二 文档扫描OCR识别 cv2 getPerspectiveTransf
  • IntelliJ IDEA 修改 idea64.exe.vmoptions文件修改错误导致软件打不开

    如果修改了idea64 exe vmoptions文件中的参数 然后导致idea打不开 那么此文一定能帮你解决问题 有的小伙伴出现此类问题之后 可能尝试的重装IntelliJ IDEA的方法 但是重装之后发现还是解决不了问题 还是会弹出如下
  • iOS开发判断版本号不同

    判断是否是第一次启动或者版本号不同时 NSString key CFBundleVersion 上一次打开的版本号 存储在沙盒中的版本号 NSString lastVersion NSUserDefaults standardUserDef
  • 串口接收数据分包问题处理(QT上位机/单片机等)

    串口数据出现分包如何正确完整接收 提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 设计思路 二 代码参考 总结 前言 串口通信在QT上位机以及单片机或者安卓串口等使用情况下 经常容易出现一包数据分成几包
  • 基于VS2019 C++的跨平台(Linux)开发——引入

    一 前言 先声明我的服务器是Ubuntu16 04 由标题可知 我的开发工具采用Visual Studio2019 使用c 语言来实现windows linux的跨平台开发 二 关于跨平台 1 什么是跨平台 由百度百科可知 跨平台概念是软件