LoginSignup
4
4

More than 1 year has passed since last update.

Visual StudioでUbuntu搭載デバイスのC/C++クロスコンパイル環境を構築する

Last updated at Posted at 2021-06-23

はじめに

エッジデバイスで規模の大きいプログラムをビルドすると時間がかかってしまうことがありますよね。
そこで今回はVisual StudioでUbuntu搭載デバイスのC/C++クロスコンパイル環境を構築する方法を紹介します。
WindowsのWSLでプログラムをビルドしてエッジデバイスにデプロイすることができます。

wsl-structure.png

環境

動作確認済デバイス(OS)

  • e-RT3 Plus F3RP70-2L1(Ubuntu 18.04 32bit)
    横河電機のエッジコントローラです。armhf アーキテクチャのパッケージが動作します。

Windowsのバージョン

  • Windows10 64bit バージョン1909

ソフトウェアのバージョン

  • Visual Studio Professional 2019 バージョン16.9.6

デバイスの準備

必要なパッケージをデバイスにインストールします。

    sudo apt update
    sudo apt install libc6-dbg

sudoers設定proxy設定が必要な場合があります。

WSLの準備

WSLのインストール

  1. Microsoft公式の手順に従ってWSLをインストールします。

  2. Microsoft StoreでUbuntu18.04 LTSをダウンロードします。
    vs-cross-2.png

WSLの設定

  1. WSLを起動してログインします。
  2. 必要なパッケージをインストールします。

        sudo apt update
        # armhf用のビルド環境をインストール
        sudo apt install crossbuild-essential-armhf
        # その他必要なパッケージをインストール
        sudo apt install make rsync zip
    

    インストールの成功を確認します。

        $ arm-linux-gnueabihf-gcc --version
        arm-linux-gnueabihf-gcc (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 7.5.0
        Copyright (C) 2017 Free Software Foundation, Inc.
        This is free software; see the source for copying conditions.  There is NO
        warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
        $ arm-linux-gnueabihf-g++ --version
        arm-linux-gnueabihf-g++ (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 7.5.0
        Copyright (C) 2017 Free Software Foundation, Inc.
        This is free software; see the source for copying conditions.  There is NO
        warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    

    ※PCがproxy環境下にある場合はproxy設定が必要です。

Visual Studioの準備

以前紹介した記事のVisual Studioの準備と同様の手順で行います。
IntelliSenceのヘッダーのダウンロードは不要です。

プロジェクトの作成とデバッグ

  1. プロジェクトの作成
    Visual Studioを起動して新しいプロジェクトを作成します。
    プロジェクトの種類に「C++」「Linux」を指定して「コンソールアプリケーション」を選択し、任意のプロジェクト名をつけてプロジェクトを作成します。
    vsremote-5.png

  2. プロジェクトの設定2
    上のメニューの「プロジェクト」→「プロパティ」をクリックします。
    wsl-2.png
    プラットフォームを「x64」とし、「全般」→「プラットフォームツールセット」に「GCC for Windows Subsystem for Linux」を指定します。
    wsl-12.png

    「デバッグ」を開き、「リモートデバッグコンピュータ」に追加したデバイスを指定します。
    vs-cross-12.png
    「C/C++」→「全般」を開き、「Cコンパイラ」と「C++コンパイラ」に「arm-linux-gnueabihf-g++」を指定します。
    vs-cross-13.png
    「リンカー」→「全般」→「リンカー」に「arm-linux-gnueabihf-g++」を指定します。
    vs-cross-14.png

  3. プロジェクトのビルドとデバッグ
    プラットフォームを「x64」にしてソースコードの任意の場所にブレークポイントを張り、プログラムをビルド、実行します。
    wsl-13.png

    プログラムがブレークポイントで止まれば成功です。
    vs-cross-16.png
    出力はLinuxコンソールウィンドウに表示されます。
    vs-cross-17.png

補足

WSLのファイルへのアクセス

WSL2の場合、エクスプローラーに\\wsl$と入力するとWSLのファイルにアクセスできます。
wsl-4.png

ビルドのみ行う方法

WSLでのビルドのみ行いたい場合は、「ビルド」メニューから対応する項目をクリックします。
wsl-3.png
出力ファイルはWindows上の<ソリューションディレクトリ>\<プロジェクトディレクトリ>\bin\<プラットフォーム>\<構成>\に配置されます。
wsl-5.png

デバイス固有のライブラリの使用

デバイス固有のライブラリを使用したプログラムをビルドする場合は、ライブラリとヘッダファイルをプロジェクトに含める必要があります。

  1. プロジェクトディレクトリにライブラリとヘッダファイルを格納するディレクトリを作成します。
    wsl-6.png

  2. 追加のインクルードディレクトリに、ヘッダファイルが含まれるディレクトリを指定します。
    wsl-7.png

  3. 追加のライブラリディレクトリに、ライブラリが含まれるディレクトリを指定します。
    wsl-8.png

  4. ライブラリの依存ファイルにライブラリ名を指定します。例えば、libfoo.soの場合は「foo」と入力します。
    wsl-9.png

4
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4