kledgeb Ubuntuの使い方や日本語化、アプリの使い方を紹介しています。

Visual StudioでUbuntu開発

「Windows」の統合開発環境(IDE)である「Visual Studio」を利用して、「Ubuntu(Linux)」上で動作するソフトウェアの開発が可能なりました。


もちろんデバッグも可能です。



「Visual C++」とある通り、C++による開発が可能です。

どうやっているのか?

ソフトウェアのビルドに必要なツール(コンパイラーやリンカーなど)やデバッガーは「Ubuntu」のものが「Ubuntu」上で動作します。

ソフトウェアのビルド時、「Visual Studio」はSSHで「Ubuntu」に接続し、ソースコードを「Ubuntu」側にコピーします。
そして「Ubuntu」側でビルドを行うように「Visual Studio」がコマンドを発行(実行)します。

デバッグは「Visual Studio」がGDBサーバーにリモート接続し、GDB経由でビルドしたソフトウェアを実行します。

ソースコードの編集や管理は「Visual Studio」が行い、それ以外の作業はリモート接続した「Ubuntu」側で行います。

1.Ubuntu側の準備

まずUbuntu側の準備です。

ここでは例として「Ubuntu 16.10 64bit版」を利用します。
またC++のソースコードからソフトウェアをビルドします。

事前にソフトウェアのビルドに必要なパッケージをインストールしておきましょう。
それに加え、「Visual Studio」から作業するために必要なパッケージをインストールする必要があります。

1-1.GDBサーバーとSSHサーバーのインストール

以下のコマンドを実行し、GDBサーバーとSSHサーバーをインストールします。

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


1-2.SSHサーバーの設定と起動

インストールが完了したら、SSHサーバーの設定(特に認証に関する設定)を行います。
SSHサーバーの設定は、「/etc/ssh/sshd_config」ファイルで行います。


設定を行わなくても利用できますが、セキュリティー上好ましくないため、SSHサーバーの設定を行っておくことを推奨します。
例えば、ポート設定の変更や公開鍵認証の利用を検討しましょう。
ここではSSHサーバーの設定方法は紹介しません。

1-3.SSHサーバーの起動

SSHサーバーの設定が完了したら、以下のコマンドを実行しSSHサーバーを起動します。

sudo systemctl start ssh


SSHサーバーの設定を変更し、設定を反映するためにSSHサーバーを再起動したければ、以下のコマンドを実行します。

sudo systemctl restart ssh


SSHサーバーの起動状態は、以下のコマンドで確認できます。

sudo systemctl status ssh

以下のようになっていれば、OKです。


2.Visual Studioのセットアップ

ここでは「Visual Studio」側で必要な作業を行います。
ここでは例として「Visual Studio 2017 RC版」を利用します。

2-1.Visual C++ for Linux Development拡張機能のインストール

「Visual Studio 2017」より前の「Visual Studio」を利用している場合は、「Visual C++ for Linux Development」拡張機能をインストールします。



「Visual C++ for Linux Development」は、「Visual Studio」の拡張機能の管理画面からインストールを行うことも可能です。

Visual Studio 2017 RC版の場合

「Visual Studio 2017 RC版」を利用している場合、インストール時に「C++によるLinux開発」にチェックを入れてからインストールを行えばOKです。


すでに「Visual Studio 2017 RC版」をインストール済みの場合は、プロジェクトの新規作成画面から「Visual Studioインストーラーを開く」をクリックし、「C++によるLinux開発」を有効にしてください。


2-2.SSH接続の追加

次にSSHの設定を行います。

「ツール」メニュー > 「オプション」をクリックし、左側の項目一覧から「Cross Platform」を展開し、「Connenction Manager」をクリックします。


上記の画面が表示されたら「Add」ボタンをクリックします。

補足

SSHの設定はソフトウェアのビルド時に行うことも可能です。

2-3.SSHの接続設定

以下の画面が表示されたら、SSHサーバーに接続するための設定を入力し、「Connect」ボタンをクリックします。


2-4.設定完了

以下のように接続が追加されます。


3.プロジェクトの作成

ここでは例として新規にプロジェクトを作成します。

3-1.プロジェクトの新規作成

「ファイル」メニュー > 「新規作成」 >「プロジェクト」をクリックします。
プロジェクト作成画面が表示されるので、用途に合わせてプロジェクトの種類を選択し、「OK」ボタンをクリックします。


ここでは例として「空のプロジェクト」を選択しました。

3-2.プロジェクトの設定

必要に応じてプロジェクトの設定を行います。
プロジェクトの設定画面は、「ソリューションエクスプローラー」から設定を行いたいプロジェクトを選択し、「プロジェクト」メニュー > 「プロパティ」から表示できます。

左側の項目一覧から「全般」を選択し、「構成の種類」から生成するソフトウェアの種類が指定できます。 


3-3.デバッグの設定

こちらも必要に応じてプロジェクトの設定を行います。


デバッグ実行時にエラーが発生する場合は、左側の項目一覧から「デバッグ」を選択し、「デバッグモード」を「gdb」に変更してみてください。


3-4.複数のSSHの接続先がある時は

以下のように複数のSSHの接続先がある時は、プロジェクトの設定から接続先を指定できます。


左側の項目一覧から「全般」を選択し、「リモートビルドマシン」から接続先を指定できます。


4.ビルドやデバッグ

ここから実際にソースコードの編集やビルドを行っていきます。

4-1.ソースコードの作成

ソースコードを作成します。


4-2.ソフトウェアのビルド

「ビルド」メニューからソリューションもしくはプロジェクトのビルドを行います。
「出力」ペインに以下のようにビルドログが出力されます。

1>------ ビルド開始: プロジェクト:Project1, 構成:Debug x64 ------
1>Validating architecture
1>Validating sources
1>Copying sources remotely
1>Starting remote build
1>Compiling sources:
1>main.cpp
1>Linking objects
1>Project1.vcxproj -> c:\Users\kledg\documents\visual studio 2017\Projects\Project1\Project1\bin\x64\Debug\Project1.out
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========

もっと詳細なログが欲しい場合は

もっと詳細なログが欲しい場合は、「ツール」メニューの「オプション」をクリックします。
左側の項目一覧から「ビルド/実行」を選択し、「MSBuildプロジェクトビルドの出力の詳細」設定を変更します。


4-3.ビルド完了

ビルドを行うと「Ubuntu」側でビルドが実行され、以下のように様々なファイルが生成されます。


実行可能なファイルは、「Project1.out」です。


4-4.デバッグ

後は普通にデバッグ(リモートGDBデバッガー)すればOKです。
ブレークポイントを設定すれば、以下のようにブレークポイントが設定された行で処理が停止します。


ソースコードの文字コードに注意

「Visual Studio」からファイルを新規に作成し保存すると、ソースコードの文字コード(符号化方式)が「Shift-JIS(CP932)」になります。
「Ubuntu」ではデフォルトの文字コードに「UTF-8」を採用しています。

そのため日本語が含まれたソースコードをビルドすると、文字化けが発生します。
あらかじめソースコードは「UTF-8」に統一しておくと良いでしょう。

様々なソフトウェアが開発可能

上記の例では非常に単純なコンソールアプリを作成しました。
もちろんGUIデスクトップアプリケーションの開発も可能です。

紹介したリンク先では、様々なソフトウェアの開発手法が紹介されています。

1.Linux IoT Projects

「Raspberry Pi」で開発を行うためのTipsです。

2.How to use the VC++ for Linux with the Intel Edison board

「Intel Edison board」で開発を行うためのTipsです。

3.Desktop Applications

Linux向けGUIデスクトップアプリケーションの開発を行うためのTipsです。
OpenGLを利用した開発サンプルです。

4.Makefile Project Template

「Makefile」を利用したプロジェクトの設定方法です。

IntelliSenseを有効にするには

ソフトウェアのビルド時に使用されるヘッダーファイルの内、「Ubuntu」側にしか存在していないヘッダーファイルはIntelliSenseの対象になりません。

これらのヘッダーファイルもIntelliSenseの対象にしたければ、ヘッダーファイルを「Windows」側にコピーし、プロジェクト設定画面の「ソースディレクトリ」にそのディレクトリーパスを追加してください。


多くのパッケージでは、ヘッダーファイルを「/usr/include」フォルダー以下に配置するため、「/usr/include」を「Ubuntu」側から丸ごとコピーすると良いでしょう。

ファイルの配置場所

インストールした開発用パッケージがどこにヘッダーファイルを配置したのか調べるには、以下のコマンドを実行します。

dpkg -L パッケージ名


Clangでコンパイルするには

デフォルトでは、「Ubuntu」のデフォルトのコンパイラーである「GCC」が利用されます。
「Clang」でコンパイルするには、プロジェクトの設定を開き「C++コンパイラ」に「clang」を指定します。


また事前に「Ubuntu」側で「clang」パッケージをインストールしておいてください。

Ubuntu 16.10 64bit版でコンパイルする時は

「Ubuntu 16.10 64bit版」でコンパイルする時は、コンパイラオプションに「-fPIC」の指定が必要になります。


関連記事一覧
オプション