【编译部署】使用Visual Studio编译Linux平台程序/动态库(远程连接)

2023-11-18

1. 背景:

由于日常在 Windows 平台上开发程序,但是项目中涉及到了 Linux 的服务器,所以需要编译 Linux 代码。
这时候如果把两个平台的代码进行分割,那数据结构等公用部分就无法进行复用,也不便于后期维护,所以如果都在 Windows 平台上进行管理是比较好的选择。
这时候就会遇到编译问题,如果我们把需要的代码复制到 Linux 机器上进行编译就太麻烦了,而现在 Visual Studio 提供了远程编译的功能,配置完成后编译非常方便。

2. 使用的环境

  • Windows10,64位操作系统
  • VMware 虚拟机,Ubuntu 20.04.4 LTS
  • Visual Studio 2019

3. 配置步骤

3.1 安装 Visual Studio 工具集

  • 打开 Visual Studio 安装文件
  • 勾选“使用C++的Linux开发”
  • 勾选合适的工具
    在这里插入图片描述

3.2 创建解决方案

  • 选择 C++ 和 Linux 项目
  • 新建一个“控制台应用程序”用于测试
    在这里插入图片描述
    在这里插入图片描述
  • 创建完成后会出现官方的用法简介
    在这里插入图片描述

3.3 Linux 端准备工作

  • 在虚拟机中的Linux系统内查看IP地址
    在这里插入图片描述
    在这里插入图片描述
  • 在VS中选择“工具——选项”
  • 选到“跨平台”
  • 添加远程连接
  • 主机名是IP地址
  • 端口不变
  • 用户名和密码是Linux系统对应的
    在这里插入图片描述
  • 完成后点击确定
  • 顶部可以看到连接成功
    在这里插入图片描述
    在这里插入图片描述

3.4 测试编译和运行

  • 点击调试

  • 没有报错即生成成功
    在这里插入图片描述
    在这里插入图片描述

  • 进入Linux系统默认的生成目录

  • 看到生成的文件

  • 进入 terminal 进行运行

  • 可以得到测试结果
    在这里插入图片描述
    在这里插入图片描述

5. 添加附加包含和附加库

  • 附加包含目录:.h/.hpp头文件位置
  • 这里需要填写远程Linux系统下的绝对路径
    在这里插入图片描述
  • 注意:项目的头文件所处的Linux下的目录一开始我们并不确定
  • 这时候可以直接进行生成,可能会报错,但是不用管
  • 生成一次以后会发现项目的头文件被自动拷贝到了Linux系统下
  • 然后填入Linux下的目录地址
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    第三方库头文件添加:
  • 首先找到所需的头文件所在目录
  • 这里以OpenCV为例,在Linux系统下编译完成后,找到头文件所在目录
  • 把绝对地址写入VS附加包含目录
    在这里插入图片描述
    在这里插入图片描述
    附加库目录:
  • 找到所需要的.so文件在Linux下的绝对地址
  • 填入VS的附加库目录
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    库依赖项:
  • 把“附加库目录”下面,需要的“库依赖项”名称填写到VS
  • 这里名称需要去除前缀“lib”和后缀“.so”
  • 比如这里填写的“opencv_world”
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    ** 编译和测试:**
  • 在代码中 include 所需的头文件
  • 编译成功后,可以在Linux 的生成目录下找到项目生成的.out文件(可执行文件)
    在这里插入图片描述
    在这里插入图片描述
    编译.so动态库:
  • 在VS项目属性中,配置类型改为“动态库”即可
  • 生成成功后,可在Linux端找到该文件
    在这里插入图片描述
    在这里插入图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【编译部署】使用Visual Studio编译Linux平台程序/动态库(远程连接) 的相关文章

  • VLC 媒体播放器有 C# 界面吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否可以使用 C 控制台应用程序中的包装器从 VLC 播放中当前播放的文件中读取曲目统计信息 时间 标
  • 是否可以使用 http url 作为 DirectShow .Net 中源过滤器的源位置?

    我正在使用 DirectShow Net 库创建一个过滤器图 该过滤器图通过使用 http 地址和 WM Asf Writer 来流式传输视频 然后 在网页上 我可以使用对象元素在 Windows Media Player 对象中呈现视频源
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 在 Mono 中反序列化 JSON 数据

    使用 Monodroid 时 是否有一种简单的方法可以将简单的 JSON 字符串反序列化为 NET 对象 System Json 只提供序列化 不提供反序列化 我尝试过的各种第三方库都会导致 Mono Monodroid 出现问题 谢谢 f
  • Selenium - C# - Webdriver - 无法找到元素

    在 C 中使用 selenium 我试图打开浏览器 导航到 Google 并找到文本搜索字段 我尝试下面的 IWebDriver driver new InternetExplorerDriver C driver Navigate GoT
  • 如何修复错误:“检测到无法访问的代码”

    我有以下代码 private string GetAnswer private int CountLeapYears DateTime startDate return count String answer GetAnswer Respo
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • if constexpr 中的 not-constexpr 变量 – clang 与 GCC

    struct A constexpr operator bool const return true int main auto f auto v if constexpr v A a f a clang 6 接受该代码 GCC 8 拒绝它
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • 读取依赖步行者输出

    I am having some problems using one of the Dlls in my application and I ran dependency walker on it i am not sure how to
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • C:设置变量范围内所有位的最有效方法

    让我们来int举个例子 int SetBitWithinRange const unsigned from const unsigned to To be implemented SetBitWithinRange应该返回一个int其中所有
  • 任何人都可以清楚地告诉如何在不使用像 这样的预定义函数的情况下找到带有小数值或小数值的指数吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 例如 2 0 5 1 414 所以想要 我是 c 的新手 所以请解释简单的逻辑 如果不是复杂的逻辑也足够了 在数学中 从整数取幂到实数
  • 如何在 C# 中获取 CMD/控制台编码

    我需要指定正确的代码页来使用 zip 库打包文件 正如我所见 我需要指定控制台编码 在我的例子中为 866 C Users User gt mode Status for device CON Lines 300 Columns 130 K

随机推荐

  • 【vue】图片加载动画效果

    加载后 一种是图片由浅到深 一种是闪光加载效果消失
  • tmux使用

    tmux使用 需求 ssh链接不稳定 若直接在ssh终端中运行某个长时间的程序 会被中断 使用tmux 即使ssh服务中断 tmux中的程序依旧运行着 常用命令汇总 开启一个tmux页面 tmux 开启一个tmux页面 自定义名字 tmux
  • Flutter Divider

    不设置高度 会在线的top和bottom占据一点空间 Divider thickness 1 h color Color 0xFF3D3D3E 设置height之后就正常了 上下没有间距了 Divider thickness 1 h hei
  • Docker未授权访问漏洞(www.hetianlab.com)

    什么是Docker Docker是一个开源的引擎 可以轻松的为任何应用创建一个轻量级的 可移植的 自给自足的容器 开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署 包括VMs 虚拟机 bare metal OpenStack 集
  • Uncaught TypeError: Cannot Read Property

    这是 JavaScript 开发人员最常遇到的错误 当你读取一个属性或调用一个未定义对象的方法时 Chrome 中就会报出这样的错误 导致这个错误发生的原因有很多 常见的一种情况是在渲染 UI 组件时 不正确地初始化状态 我们来看一个真实的
  • getifaddrs, freeifaddrs manual

    GETIFADDRS 3 Linux Programmer s Manual GETIFADDRS 3 NAME top getifaddrs freeifaddrs get interface addresses SYNOPSIS top
  • Java 结构化数据处理开源库 SPL

    现代Java应用架构越来越强调数据存储和处理分离 以获得更好的可维护性 可扩展性以及可移植性 比如火热的微服务就是一种典型 这种架构通常要求业务逻辑要在Java程序中实现 而不是像传统应用架构中放在数据库中 应用中的业务逻辑大都会涉及结构化
  • 专栏推介:《Hi3861网络编程实验》

    引言 本文是鸿蒙专栏 Hi3861网络编程实验 中的第一篇 从这个专栏的名称不难看出 这里面有三个关键词 鸿蒙 即 鸿蒙操作系统 Hi3861 海思生产的一款处理器 网络编程 也就是说 这个专栏就是带着大家做一些网络编程实验 实验代码是基于
  • FPGA零基础学习之Vivado-UART驱动教程

    FPGA零基础学习之Vivado UART驱动教程 本系列将带来FPGA的系统性学习 从最基本的数字电路基础开始 最详细操作步骤 最直白的言语描述 手把手的 傻瓜式 讲解 让电子 信息 通信类专业学生 初入职场小白及打算进阶提升的职业开发者
  • 测试用例--等价类划分、边界值法

    一 测试用例 案例 test case test instance 1 定义 是在测试执行之前 由测试人员编写的指导测试过程的重要文档 主要包括 用例编号 测试目的 测试步骤 用例描述 预期结果 2 介绍编写测试用例的7种方法 1 等价类划
  • js中常见的错误

    js运行报错 首现我们要先学会查看在哪里查看错误 打开页面点击鼠标右键审查元素 检查 打开控制台 然后根据上面的提示 读取 相关信息 然后读取自己哪里错了 最后寻找相应代码进行修改 1 未定义错误 Uncaught ReferenceErr
  • this指向的一个题

    妈呀啊啊啊啊啊啊啊啊啊啊啊 真的要崩溃 看视频的时候看到了一个this指向的题 想了半个小时 真的被自己蠢到 怎么会有人这么笨啊 function a xx this x xx return this var x a 5 var y a 6
  • 尝试爬取LOL英雄技能属性--01

    首先我们找到一个LOL英雄的全部展示的页面 http lol kuai8 com hero 恕瑞玛 your king has return hah hah金克丝长得不错 点击一下http lol kuai8 com hero 3 html
  • Arduino ESP32自平衡小车制作实现(不需编码器)

    1 mpu6050陀螺仪角度方向和静态平衡角度测试 说明 1 陀螺仪补偿值的计算 试时提前用calcGyroOffsets true 函数计算出 补偿值 知道mpu6050的补偿值后用setGyroOffsets 直接设置补偿值 避免每次开
  • 生成指定长度的随机字符串(数组和字母组合)

    brief getRandomCode 生成指定长度的随机字符串 数组和字母组合 param codelength 指定字符串长度 return 生成的字符串 QString getRandomCode int codelength con
  • 通过git clone批量下载huggingface模型和数据集

    目录 前言 一 配置git全局代理 可选 1 配置http或socks5代理 2 取消代理配置 二 下载步骤 问题 前言 想要下载huggingface的模型 却发现只能一个个文件下载非常不方便 又或者官方提供的api不好用或者下载不下来
  • 浏览器有哪些进程?浏览器进程,渲染进程,网络进程,渲染进程有哪些线程?

    浏览器进程 渲染进程有哪些线程 在浏览器中打开两个页面 会开启几个进程 1个浏览器进程 1个网络进程 一个GPU进程 通常一个Tab页对应一个渲染进程 但有其它情况 1 如果页面中有iframe的话 iframe也会运行在单独的进程中 2
  • 实现SSM简易商城项目的登录注册功能

    实现SSM简易商城项目的登录注册功能 项目背景介绍 在互联网时代 电商行业蓬勃发展 越来越多的人开始关注电子商务 为了实现一个简易商城项目 我们选择了SSM框架作为项目的基础架构 SSM分别代表了Spring SpringMVC和MyBat
  • 睿智的目标检测24——Keras搭建Mobilenet-SSD目标检测平台

    睿智的目标检测24 Keras搭建Mobilenet SSD目标检测平台 更新说明 学习前言 什么是SSD目标检测算法 源码下载 SSD实现思路 一 预测部分 1 主干网络介绍 2 从特征获取预测结果 3 预测结果的解码 4 在原图上进行绘
  • 【编译部署】使用Visual Studio编译Linux平台程序/动态库(远程连接)

    文章目录 1 背景 2 使用的环境 3 配置步骤 3 1 安装 Visual Studio 工具集 3 2 创建解决方案 3 3 Linux 端准备工作 3 4 测试编译和运行 5 添加附加包含和附加库 1 背景 由于日常在 Windows