Help us understand the problem. What is going on with this article?

Visual Studio 2017 と Bash on Ubuntu on Windows による C++ Linux 開発環境の構築

More than 3 years have passed since last update.

Bash on Ubuntu on Windows と Visual Studio 2017 により Windows 10 上で、Linux アプリ開発が可能に!

Windows 10 Anniversary Update から、OS の機能一つとして、Linux のディストリビューションの一つである Ubuntu がサポートされるようになりました。Windows 環境で、Linux が利用可能です!

さらに、Visual Studio 2017 では、Linux の C++ 開発が標準でサポートされるようになりました。
Visual Studio の IDE を使い、C++ 開発を行い、コード上にプレイク ポイントを設定し、ステップ実行を行うことが可能です!!

Bash on Ubuntu on Windows のインストールと構成

この Bash on Ubuntu on Windows は、デフォルトでは、有効化されないので、[Windows の機能の有効化または無効化] から、[Windows Subsystem for Linux(beta)] 選択して機能の有効化を行う必要があります。
image.png

機能を有効化後、[スタート スクリーン] から、[Bash on Ubuntu on Windows] を選択すると、初回起動時に、Windows ストアから Ubuntu がインストールされます。

-- ベータ機能 --
これにより Windows に Ubuntu がインストールされます。Ubuntu は Canonical によって配布される製品であり、
次のサイトに示される条件に基づいてライセンスされています。
https://aka.ms/uowterms

続行するには、"y" を入力してください: y
Windows ストアからダウンロードしています... 100%
ファイル システムを展開しています。この処理には数分かかります...
Ubuntu のロケールを Windows のロケール (ja-JP) と一致するように設定しますか?
既定のロケールは en_US です。
続行するには、"y" を入力してください: y
既定の UNIX ユーザー アカウントを作成してください。ユーザー名は、Windows のユーザー名と一致する必要はありません。
詳細: https://aka.ms/wslusers を参照してください
新しい UNIX ユーザー名を入力してください: root
UNIX ユーザーが見つかりました: root
インストールが正常に終了しました
環境が間もなく開始されます...
ドキュメントを参照できる場所: https://aka.ms/wsldocs
root@Ubuubu:/mnt/c/Windows/System32#

まず、g++ 等の開発環境をインストールします。

root@Ubuubu:~# sudo apt install -y build-essential
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
(省略)

次に、リモート デバッグを可能にする gdbserver をインストールします。

root@Ubuubu:~# sudo apt install -y gdbserver
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  gdbserver
(省略)

SSH サーバーをインストールします。

root@Ubuubu:~# sudo apt install -y openssh-server
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
(省略)

任意のテキスト エディタを使い sshd_config を開き、“PasswordAuthentication” を "yes" に設定します。

root@Ubuubu:~# sudo vi/etc/ssh/sshd_config

image.png

SSH キーを生成します。

root@Ubuubu:~# sudo ssh-keygen -A

SSH サーバーを起動します。

root@Ubuubu:~# sudo service ssh start
 * Starting OpenBSD Secure Shell server sshd                                                                     [ OK ]

(*)Bash on Ubuntu on Windows のプロセスを終了すると SSH サーバーも終了していまいますので、Bash on Ubuntu on Windows のプロセス起動時には、SSH サーバーも起動するようにしてください。

SSH のデフォルトでは、root 権限のログオンに制限がありますので、任意のユーザーを追加しておきます。

root@Ubuubu:~#  sudo adduser debug002
ユーザー `debug002' を追加しています...
新しいグループ `debug002' (1001) を追加しています...
新しいユーザー `debug002' (1001) をグループ `debug002' に追加しています...
ホームディレクトリ `/home/debug002' を作成しています...
`/etc/skel' からファイルをコピーしています...
新しい UNIX パスワードを入力してください:
新しい UNIX パスワードを再入力してください:
passwd: password updated successfully
Changing the user information for debug002
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
以上で正しいですか? [Y/n] y

Visual Studio 2017 による Linux C++ 開発の設定

[スタート スクリーン] から [Visual Studio Installer] を起動します。
image.png

[変更] - [ワークロード] - [C++ による Linux 開発] を選択して、[変更] を選択します。
image.png

インストール完了後、Visual Studio 2017 を起動します。
起動後、[ツール] - [オプション] - [クロス プラットフォーム] - [接続マネージャー] - [追加] を選択します。
[リモート システムへの接続] ダイアログの [ホスト名] を "localhost"、 [ポート] を "22"、 [ユーザー名] を "debug002"(任意)、[認証の種類] を "パスワード"、[パスワード] を "debug002"(任意)のパスワードとして、[接続] を選択します。
image.png

次に、アプリケーションを作成します。
[ファイル] - [新規作成] - [プロジェクト] - [コンソール アプリケーション(Linux)] を選択し、[OK] を選択します。
image.png

main.cpp のコードを参照し、5 行目にブレイク ポイントを設定します。
image.png

[リモート GDB デバッガー] を選択し、デバッガーを起動します。
ファイヤー ウォールの警告が出る場合、アクセスを許可します。
image.png

デバッガーが起動すると、ブレイク ポイントにヒットして待機していることが分かります。
image.png

Linux の出力は、[デバッグ] - [Linux コンソール] から、 [Linux Console Window] を起動できます。
image.png

コーディングの多くで Visual Studio を使っている場合、やはり、他のツール、IDE では物足りなくなる。
VC++ で書いたものを Linux へ持っていこうとするが、やはり、g++ と違うことが多くて、苦労していました。

Visual Studio 2017 で Linux 開発出来て、さらに、Linux 自体も Windows 10 でサポートされるって、非常に欲しかった方向に進んで、必然の進歩なのかもしれませんが、Windows と Linux の親和性の強化、今後とも期待が持てる分野と考えています!!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした