Windows开发和交叉编译环境配置

1,249 阅读5分钟

在Windows上搭建开发和编译环境,可以使用虚拟机软件或者安装WSL。

安装虚拟机
  1. 安装虚拟机软件VirtualBox
  2. 安装Linux虚拟机。
安装WSL

适用于Linux的Windows子系统(WSL)可让开发人员直接在Windows上按原样运行GNU/Linux环境(包括大多数命令行工具、实用工具和应用程序),且不会产生传统虚拟机或双启动设置开销。安装Windows Subsystem for Linux(WSL):在管理员模式下打开PowerShell输入wsl --install;然后重启计算机。此命令将启用运行WSL并安装Linux的Ubuntu发行版所需的功能。或者打开Microsoft Store,安装Linux发行版。要在安装新的Linux发行版时将默认版本设置为WSL 1或WSL 2,请使用命令 wsl --set-default-version <Version#>,将<Version#>替换为1或2。然后设置WSL开发环境

终端登录虚拟机配置
  1. 网络配置

确保虚拟机和宿主机之间的通信:将虚拟的网络设置为桥接模式(也可以配置为NAT模式需要做端口映射)。Ubuntu 18.04及以上版本,不再使用interfaces文件配置,而使用netplan。编辑netplan的配置文件/etc/netplan/01-network-manager-all.yaml:

network:
  version: 2
  renderer: networkd # 或者 'NetworkManager',取决于您使用的后台渲染器
  ethernets:
    enp0s3: 
      dhcp4: true
      dhcp6: no
      addresses:
        - 192.168.121.188/23
        - 10.0.0.100/24
      gateway4: 192.168.120.1
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]

应用新的网络配置sudo netplan apply。(常用将网络设置为:Host-Only模式下虚拟机和主机可以互相通信,但默认情况下无法访问外部网络,通常位于192.168.56.0/24网络内 + NAT模式下虚拟机通过主机(物理计算机)连接到外部网络,通常位于10.0.3.0/24网络内)

  1. 安装和开启SSH服务
sudo apt install openssh-server
sudo systemctl status ssh
sudo systemctl start ssh
sudo systemctl enable ssh

OpenSSH默认支持SFTP(Secure File Transfer Protocol)和SCP(Secure Copy Protocol)/RSYNC(Remote Sync),这意味着只要你已经在Linux服务器上安装并启用了SSH服务,那么sftp服务和scp也是可用的。推荐使用MobaXterm作为SSH客户端。

GitLab用户配置
  1. Git配置
git config --global user.name "xxx"   
git config --global user.email xxx@gmail.com
git config --list
  1. GitLab add SSH Keys
ssh-keygen -t ed25519 -C "xxx"
cat ~/.ssh/id_ed25519.pub | clip           # Git Bash on Windows
xclip -sel clip < ~/.ssh/id_ed25519.pub    # Linux 
  1. GitLab add GPG Keys
gpg --gen-key
gpg --list-secret-keys --keyid-format LONG <EMAIL>    # list your private GPG key
gpg --armor --export <ID>                             # To show the associated public key
Samba配置
  1. 安装Samba

sudo apt install samba

  1. 更改共享目录的所有者和权限
sudo chown -R nobody:nogroup /path/shared/folder
sudo chmod -R 0775 /path/shared/folder      
  1. 编辑Samba的配置文件/etc/samba/smb.conf
[sharefolder]
  comment = Ubuntu Share
  path = /path/shared/folder
  browseable = yes
  read only = no
  guest ok = no 
  create mask = 0775
  directory mask = 0775
  valid users = yourusername
  1. 创建Samba用户

sudo smbpasswd -a yourusername

  1. 重启Samba服务
sudo systemctl restart smbd
\\ubuntu-server-ip\sharedfolder
FTP配置
  1. 安装vsftpd

sudo apt install vsftpd

  1. 更改共享目录的所有者和权限
sudo chown -R nobody:nogroup /path/shared/folder
sudo chmod -R 0775 /path/shared/folder      
  1. 编辑Samba的配置文件/etc/vsftpd.conf
write_enable=YES
  1. 重启FTP服务

sudo systemctl restart vsftpd

编译工具链配置
GCC交叉编译工具链
  1. 下载安装GCC交叉编译工具链。(Arm GNU Toolchain
  2. 配置交叉编译环境和编译选项。(在~/.profile脚本配置环境变量ARCH、PATH、CROSS_COMPILE等)
  3. 安装cmake和make。(sudo apt-get install build-essential gdb install the GNU compiler tools and the GDB debugger)
NDK(Native Development Kit)交叉编译工具链

使用 NDK 编译代码主要有三种方法:基于Make的ndk-build、CMake、独立工具链,用于与其他构建系统集成,或与基于configure的项目搭配使用。 Android NDK支持使用CMake编译应用的C和C++代码。本页介绍了如何通过Android Gradle插件的ExternalNativeBuild或通过直接调用CMake将CMake与NDK搭配使用。

  1. CMake工具链文件

NDK通过工具链文件支持CMake。工具链文件是用于自定义交叉编译工具链行为的CMake文件。用于NDK的工具链文件位于NDK中以下位置:<NDK>/build/cmake/android.toolchain.cmake

  1. 用法

使用CMake进行构建时,工具链文件本身及其参数必须传递给CMake。

$ cmake \
    -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \
    -DANDROID_ABI=$ABI \
    -DANDROID_PLATFORM=android-$MINSDKVERSION \
    $OTHER_ARGS
  1. 工具链参数

如果通过命令行进行构建,请使用-D将参数传递给CMake。以下参数可以传递给CMake工具链文件。

  • CMAKE_BUILD_TYPE:指定构建类型。
  • CMAKE_TOOLCHAIN_FILE:指定CMake工具链文件,用于Android平台的交叉编译。
  • ANDROID_TOOLCHAIN:-DANDROID_TOOLCHAIN=clang指定使用Clang作为编译器。
  • ANDROID_ABI:ABI(Application Binary Interface)指定了目标CPU架构和指令集。
  • ANDROID_NDK:指定Android NDK的路径。
  • ANDROID_NATIVE_API_LEVEL:ANDROID_PLATFORM的别名。指定应用或库所支持的最低API级别。此值对应于应用的minSdkVersion。当直接调用CMake时,此值默认为所使用的NDK支持的最低API级别。
  • CMAKE_MAKE_PROGRAM:指定构建系统的路径,这里使用Ninja。
  • CMAKE_GENERATOR:-DCMAKE_GENERATOR="Ninja"-GNinja指定使用Ninja作为生成器。
  1. 一个例子
                    Executable : ${HOME}/Android/Sdk/cmake/3.10.2.4988404/bin/cmake
arguments :
-H${HOME}/Dev/github-projects/googlesamples/ndk-samples/hello-jni/app/src/main/cpp
-DCMAKE_FIND_ROOT_PATH=${HOME}/Dev/github-projects/googlesamples/ndk-samples/hello-jni/app/.cxx/cmake/universalDebug/prefab/armeabi-v7a/prefab
-DCMAKE_BUILD_TYPE=Debug
-DCMAKE_TOOLCHAIN_FILE=${HOME}/Android/Sdk/ndk/22.1.7171670/build/cmake/android.toolchain.cmake
-DANDROID_ABI=armeabi-v7a
-DANDROID_NDK=${HOME}/Android/Sdk/ndk/22.1.7171670
-DANDROID_PLATFORM=android-23
-DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a
-DCMAKE_ANDROID_NDK=${HOME}/Android/Sdk/ndk/22.1.7171670
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${HOME}/Dev/github-projects/googlesamples/ndk-samples/hello-jni/app/build/intermediates/cmake/universalDebug/obj/armeabi-v7a
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${HOME}/Dev/github-projects/googlesamples/ndk-samples/hello-jni/app/build/intermediates/cmake/universalDebug/obj/armeabi-v7a
-DCMAKE_MAKE_PROGRAM=${HOME}/Android/Sdk/cmake/3.10.2.4988404/bin/ninja
-DCMAKE_SYSTEM_NAME=Android
-DCMAKE_SYSTEM_VERSION=23
-B${HOME}/Dev/github-projects/googlesamples/ndk-samples/hello-jni/app/.cxx/cmake/universalDebug/armeabi-v7a
-GNinja
jvmArgs :


                    Build command args: []
                    Version: 1
开发工具vscode配置
  1. 安装插件

在左侧的Extensions中安装C/C++ Extension Pack、CMake等插件。(CodeGeeX、Lingma)

  1. 安装C/C++编译

Windows用户通常会选择MinGW-w64或者Microsoft Visual C++ (MSVC);Linux用户通常默认已安装gcc/g++编译器。

  1. 配置环境变量

确保编译器路径(如g++)已添加到系统环境变量中。

  1. vscode设置

vscode提供了不同的设置范围:用户设置(./User/settings.json)和工作区设置(.vscode文件夹)。在用户设置中配置全局设置,在当前工作区设置中配置当前工作区设置。你可以在当前工作区的.vscode文件夹中创建一些配置文件:settings.jsontasks.json (编译器构建设置) 、launch.json(调试器设置)、c_cpp_properties.json(编译器路径和智能感知设置)。重用配置只需要将JSON格式的配置文件复制到新项目的.vscode文件夹中。

  1. 在本地开发或者登录Remote Host开发。