Visual Studio交叉编译ARM工程

1、环境准备

1.1、软件安装

在Windows10/Windows11系统上安装Visual Studio 2022和装有Linux系统的虚拟机VMware Workstation Pro。(这里以Visual Studio 2022为例,也可以换成其它支持远程调试的工具版本如Visual Studio 2019及更高的版本)

注意:安装Visual Studio 2022时一定要勾选上“使用C++的Linux和嵌入式开发”的工具集。

虚拟机安装完成后,进行Linux系统的安装。

注意:明确系统的cpu架构,是x86、x64、ARM还是ARM64,这在之后的Visual Studio中需要选择编译平台。

1.2、Linux系统环境配置

  1. 配置Linux系统的SSH连接

以ubuntu16.04为例,需要在Linux系统上安装可进行C++程序编译以及远程调试的包。使用如下命令:

sudo apt-get install openssh-server g++ gdb gdbserver -y

  1. Linux系统交叉编译链的设置

以rk3399交叉编译链为例进行说明。需要注意的是rk3588使用的也是这个交叉编译链工具。交叉编译链工具存放目录为RK3399/linuxsdk-friendlyelec/buildroot/output/rockchip_rk3399/host/bin/ 其中部分工具的截图如下:

2、Visual Studio 2022交叉编译ARM工程项目

2.1、设置远程连接

  1. 在 Visual Studio 中,依次选择菜单栏上的“工具”>“选项”,以打开“选项”对话框。 然后,依次选择“跨平台”>“连接管理器”,以打开“连接管理器”对话框。如果你以前没有在 Visual Studio 中设置过连接,Visual Studio 会在你首次生成项目时,为你打开“连接管理器”对话框。

  1. 设置完成以后就可以开始写代码测试了。执行程序的地方,默认会出现上面配置的远程Linux系统的IP地址。

  1. 如果需要使用Linux控制台与应用进行交互,请选择“调试”->“Linux控制台”。

  1. 上图中点击“开发者PowerShell”下拉菜单,出现如下图所示的选项。

  1. 选择需要进行远程连接的系统,以本地虚拟机中的ubuntu系统yy@192.168.117.128为例,连接成功会出现如下所示:

  1. 在Linux控制台里可以像在Linux系统里的终端一样进行操作,例如进行文件的查看和代码编译等。

2.2在Visual Studio中进行ARM工程的配置和交叉编译

创建一个C++的Linux控制台应用程序项目存储在本地。根据远程Linux系统的CPU架构,选择对应的配置。由于要使用交叉编译链进行ARM应用程序的生成。选择配置为ARM或ARM64。以ARM64为例进行说明。

按照ARM工程的目录结构,新建筛选器如下图。

在各筛选器下依次添加原ARM工程代码文件。这种方法对于其它需要在VS2022编译Linux程序的项目也适用。

配置项目属性,如下:

对于ARM64平台的所有配置,其常规设置可以一致。修改目标文件名,删除目标文件扩展名.out,与原ARM工程应用程序文件名保持一致。平台工具集选择GCC for Remote Linux,远程生成计算机由远程连接时填入的信息生成,远程根目录为”~/projects”。

调试属性中,要启动的调试器为远程GDB调试程序。调试模式有gdb和gdbserver。gdb调试是应用程序在开发板上运行,然后在PC机上对开发板上的应用程序进行调试,PC机运行gdb,开发板上运行gdbserver。在应用程序调试的时候,pc机上的gdb向开发板上的gdbserver发出命令,开发板上的gdbserver会向应用程序发出信号,使应用程序停下来或者完成一些其它工作。

远程调试器类型分为gdb和lldb。gdb是Unix和类Unix系统下的调试工具,lldb是个开源的具有REPL(read-eval-print-loop,读取-评估-打印-循环)特征的Debugger。

调试属性中的其它选项按照默认设置。

VC++目录属性设置可以略过。

复制源属性设置如下图。均是默认设置。需要注意的是远程复制源方法,VS2022中提供了rsync和sftp。这两种工具均可通过SSH传输文件。rsync是一个用于*unix系统的文件同步和文件传输程序,可通过使用一种增量编码形式来最小化网络数据传输,这样只有源数据和目标数据之间的差异才会被传输。sftp是用于在两台机器之间进行安全复制的基本命令行工具。sftp协议允许对远程文件进行一系列操作,包括恢复中断的传输、查看目录列表和删除远程文件等。

C/C++属性配置见下图C/C++所有选项,其中需要注意的是交叉编译链的设置(查了一下,目前网络上还没有这样简便的方法,算是独家配方了)。C编译器和C++编译器均设置为虚拟机ubuntu目录下的交叉编译链路径,以本机使用的交叉编译链工具为例,设置为 “home/yy/RK3399/linuxsdk-friendlyelec/buildroot/output/rockchip_rk3399/host/bin/aarch64-buildroot-linux-gnu-g++”。

附加包含目录按照ARM工程中的源代码所处目录进行设置。

C/C++属性配置中其它选项按照默认设置进行。

链接器属性配置见下图链接器所有选项。需要注意的是附加库目录、库依赖项和链接器。附加库目录设置为远程系统中库文件所在的目录。

以本机使用的静态库libBase.a和libxxxx.a为例,因为xxxx以及程序中代码依赖pthread,在库依赖项中添加

pthread

Base

xxxxx

注意:在VS2022中添加静态库,不需要写lib或.a,只需要写静态库名称即可。

至此ARM工程的VS2022配置项完成。

接下来右键点击工程,选择生成,结果如下图所示,成功通过交叉编译链生成ARM应用程序。

同样,可以生成release版的ARM应用程序,如下图。

生成的应用程序不仅在本地存了一份,而且自动复制了一份到远程系统工程对应的目录里,如下图所示。

将执行程序通过远程工具拷贝至ARM开发板,赋予执行权限后,启动程序可以正常执行,使用远程工具拷贝后结果以及在终端执行命令后效果如下图所示。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 由于Godot引擎本身是使用C++编写的,因此可以在Windows环境下使用Visual Studio编译生成ARM Linux可执行文件。 编译过程如下: 1. 首先需要安装Visual Studio和Windows SDK,并配置好编译环境。 2. 下载Godot源代码,并使用scons工具构建Godot。 3. 配置编译选项,设置目标平台为ARM Linux。 4. 编译Godot源代码,生成可执行文件。 5. 将生成的可执行文件部署到目标平台上。 请注意,这个编译过程需要一定的技术知识,如果您不熟悉编译操作,建议您先了解相关知识。 ### 回答2: 在Windows下编译Godot引擎到ARM Linux需要进行一系列步骤。下面是一个简单的教程: 1. 安装必要的软件:首先,您需要安装Git进行版本控制,CMake用于构建工程,以及交叉编译工具链(即arm-linux-gnueabihf)用于生成ARM Linux目标代码。您可以在其官方网站上找到并下载这些软件。 2. 克隆Godot源代码:使用Git工具,在命令行中克隆Godot引擎的源代码仓库。执行以下命令:git clone https://github.com/godotengine/godot.git 3. 配置交叉编译工具链:通过设置环境变量或在CMake配置过程中指定交叉编译工具链的路径,让CMake知道您想要构建ARM Linux目标。 4. 生成Makefile文件:使用CMake配置和生成Godot引擎的Makefile文件。在命令行中进入克隆的Godot源代码目录,并执行以下命令:cmake -B <build_directory> -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release。 5. 编译Godot引擎:在步骤4中生成的构建目录中,执行以下命令编译Godot引擎:cmake --build <build_directory> --config Release。 6. 生成导出模板:在成功编译Godot引擎后,在构建目录中执行以下命令来生成ARM Linux的导出模板:scons platform=linuxbsd target=release_debug tools=no。 7. 导出ARM Linux应用程序:根据您的需求,您可以使用Godot编辑器或命令行工具导出ARM Linux的应用程序。导出后,您将获得一个与ARM Linux操作系统兼容的可执行文件。 请注意,这个教程并不是详尽无遗的,并且可能会因不同的配置和源代码版本而有所不同。因此,在进行这个编译过程时,最好参考Godot官方文档中的具体指引和要求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值