« Bash on Ubuntu on Windows -- ネットワークドライブをマウントする | トップページ | 80sラジカセでradikoを聴く »

2017.05.29

Bash on Ubuntu on Windows -- Visual Studioからリモートビルドしてみる

Visual Studio 2017では、Linuxとsshで接続してリモートビルドを行うことができます。
したがって、Bash on Ubuntu on Windows (Windows Subsystem for Linux (WSL)) に対してもリモートビルド可能です。
これらの記事を参考にしました。ありがとうございます。
WSL その75 - Visual Studio + Ubuntu on WindowsでUbuntuのソフトウェアが開発可能に:kledgeb
Bash on Ubuntu on Windowsを使って「開発」をしてみよう:Build Insider

なお、私が試した環境は、
Windows 10 Pro Insider Preview build 16193
です。

1.Visual Studio 2017 Communityをオフラインでインストール

Visual Studioは大変大きいプログラムなので、何度かインストールをし直す必要が発生した場合、その都度モジュールをすべてダウンロードしていると大変なことになります。
そこで、Visual Studio ダウンロードサイトからブートストラップファイル(インストーラー)をダウンロードした後、


vs_community.exe --layout c:\vs2017offline

とします。vs_community.exeは、名前をつけて保存をしてリネームしない限りは、実際には保存したファイル名となり、おそらく数字が入ったファイル名になっています。
こうすると、c:\vs2017offlineフォルダにオフラインインストーラーが保存されます。

vs_community.exe --layout c:\vs2017offline --lang en-US ja-JP

すると、英語と日本語のみのワークロードとコンポーネントをダウンロードします。

上の例ですと、c:\vs2017offlineに含まれるvs_community.exeを実行するとインストールが始まります。
2017052712
”C++によるLinux開発”にチェックを入れてインストールします。

ただし、私のケースでは、インストールが最後まで進まない状況が発生し、結構悩みました。
結局、Windows Defenderを一時的に無効にすることでインストールできました。

2017052701
2017052702

インストールが完了したら、Windows Defenderを有効にしてください。

2017051802
インストールが完了したらVisual Studioを起動して、無事インストールしたことを確認します。


2.WSLの設定

WindowsのVisual StudioからWSL環境にリモートビルドするためには、WSL側の準備が必要になります。SSL通信ができるようすること、コンパイル及びデバッグツールをインストールする必要があります。


$ sudo apt-get install openssh-server build-essential gdb gdbserver

次に、/etc/ssh/sshd_configのPasswordAuthenticationをyesに編集します。

$ sudo ssh-keygen -A

として、鍵を作成します。

さらに、sshサービスを起動します。(リモートビルドするたびにsshサービスを起動する必要があります。)


$ sudo service ssh start


3.Visual Studio 2017からWSLにリモートビルド

ようやく準備ができましたので、Visual Studio 2017からC++プログラムをWSLにリモートビルドしてみます。
サンプルプログラムとして、


#include <cstdio>
int main()
{
printf("Visual StdioからWSL環境にリモートビルドしました。\n");
return 0;
}

を試してみます。

2017052703

メニューの”ファイル”→”新規作成”→”プロジェクト”から”Visual C++”→”クロスプラットフォーム”→”Linux”の”コンソールアプリケーション(Linux)”を選択します。
2017052706

main.cppに先程のソースコードをコーディングします。

次に、リモートビルドのための準備をしてみましょう。
メニューの”ツール”→”オプション”→”クロスプラットフォーム”→”接続マネージャ”にSSH接続を追加します。
2017052704

2017052705
SSH接続が追加されました。

次に、デバッガの設定をします。
”プロジェクト”→”ConsoleApplication1のプロパティ”→”構成プロパティ”→”デバッグ”の”デバッグモード”は”gdb”にしないとうまくいきませんでした。
2017052708

ようやく、ビルド及びデバッグ実行に移ります。
ただし、Linuxの標準設定ですと、UTF-8エンコーディングにしておかないと、表示が文字化けしたりします。
ファイルをUTF-8で保存しましょう。
メニューの”ファイル”→”名前を付けてmain.cppを保存”とし、”エンコード付きで保存”を選択します。
20170527071

2017052707

次にビルドします。
2017052710

”リモートGDBデバッガー”アイコンをクリックするか、F5キーでデバッグ実行します。
2017052709
出力Windowで文字化けが起こるのはご愛嬌でしょうか…

2017052711
WSLのホームディレクトリにprojectsディレクトリが作成され、そこにConsoleApplication1ディレクトリが作成されています。この中を辿っていくと、実行プログラムが作成されており、当然WSL上で実行できました。

|

« Bash on Ubuntu on Windows -- ネットワークドライブをマウントする | トップページ | 80sラジカセでradikoを聴く »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1024423/70693247

この記事へのトラックバック一覧です: Bash on Ubuntu on Windows -- Visual Studioからリモートビルドしてみる:

« Bash on Ubuntu on Windows -- ネットワークドライブをマウントする | トップページ | 80sラジカセでradikoを聴く »