本サイトでは、アフィリエイト広告およびGoogleアドセンスを利用しています。

VisualStudio で for Linux Development その2

先日の続きの検証を行いました。Hello,world よりはサンプルらしいもので検証しました。
色々とありましたが、最終的に動かしたのはこんな感じになりました。

remote-opengl-ubuntu

Ubuntu を使うように変わっていますが、それには次のような理由がありました。

問題点

いくつか問題になる点があったので記載しておきます。
まだまだこの拡張プラグインも開発途中でしょうし、いつかは対策されるかもしれません。

コンパイルに失敗するファイルについて

コンパイルができないソースコードに出遭ったときに、次のメッセージが出てしまい実用上使えないです。
“g++ exited with code 1, please see the Output Window – Build output for more details.” と表示されても出力ウィンドウにはそれ以上情報が出ていないのでわからずです。

コンパイル(ビルド)が重い

プロジェクトにあるファイルを全て scp で転送しているようなので、ビルド処理が重いです。編集・未編集を考慮していないようで、大量のファイルがあると毎回送り直しのためビルドにとても時間がかかります。

Releaseビルドができない

たまたまなのかReleaseビルドができない問題を引いてしまいました。

1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\
Application Type\Linux\1.0\Linux.Common.targets(132,5): 
error : Element  has an invalid value of "LineNumber".

と表示されてしまいました。Q&Aなどにも上がっているような内容だったので割と早期に修正されるかもしれません。

Ubuntuに変更

あまりに致命的なものが多かったので、 Fedora23 から Ubuntu 15.10 を使うように変更しました。基本的には参考情報のそのままで Ubuntu に openssh サーバーやら gcc などのコンパイル環境を構築したものです。
Ubuntu を使うようにしたところ、コンパイル失敗時にちゃんとエラーメッセージが確認できるようになりました。

OpenGL のアプリケーションを作って確認してみたいので、この Ubuntu に glut をインストールしておきます。

$ sudo apt-get install freeglut3 freeglut3-dev libgles1-mesa libgles1-mesa-dev

テスト

参考サイトでも使っていたサンプルプログラムを使わせてもらいます。

http://lousodrome.net/opengl/index.html.en
こちらのサンプルプログラムを使わせてもらいました。ここの “Spinning cube” をダウンロードして展開しておきます。

プロジェクトの作成

VisualStudio で Hello,world のときと同様に新規プロジェクトを作成します。
そして、先ほどのサンプルの中に含まれていた main.c をこのプロジェクトに追加します。

vs_linux_2_1

そしてビルドを実行してみてエラーがなく終了するか確認してください。
Fedora のときと違い、エラーが出てもメッセージが確認できると思います。
ここまで素直にやっている場合には以下のようなエラーが出ていることかと思います。

main.c(74): error : `glColor3f' に対する定義されていない参照です
main.c(74): error : `glVertex3f' に対する定義されていない参照です
main.c(77): error : `glEnd' に対する定義されていない参照です
main.c(84): error : `glutSwapBuffers' に対する定義されていない参照です
main.c(87): error : `glutPostRedisplay' に対する定義されていない参照です
main.c(95): error : `glMatrixMode' に対する定義されていない参照です
main.c(97): error : `glLoadIdentity' に対する定義されていない参照です
main.c(98): error : `gluPerspective' に対する定義されていない参照です
main.c(101): error : `glMatrixMode' に対する定義されていない参照です
main.c(102): error : `glutPostRedisplay' に対する定義されていない参照です
main.c(121): error : `glutInit' に対する定義されていない参照です
main.c(122): error : `glutInitDisplayMode' に対する定義されていない参照です
main.c(123): error : `glutInitWindowSize' に対する定義されていない参照です
main.c(124): error : `glutCreateWindow' に対する定義されていない参照です
main.c(131): error : `glutDisplayFunc' に対する定義されていない参照です
main.c(132): error : `glutReshapeFunc' に対する定義されていない参照です
main.c(133): error : `glutKeyboardFunc' に対する定義されていない参照です
main.c(136): error : `glutMainLoop' に対する定義されていない参照です

見ての通りですが、ライブラリのリンク設定を忘れたためです。
プロジェクトのプロパティでOpenGL, glut のライブラリを追加設定します。
vs_linux_2_2

実行

コンパイルおよびリンクが成功したあと、そのまま実行といきたいところですが、うまくいきません。
OpenGL と X-Window の設定が関係してくるためです。
DISPLAY環境変数を設定してあげる必要があるので、以下のようにして環境変数 DISPLAY=:0.0 を設定します。

vs_linux_2_3

この状態でデバッグ実行を開始すると、冒頭のように Ubuntu 側で OpenGL のアプリケーションが表示されて動き始めます。

まとめ

ようやくアプリケーションが動くのが確認できました。
リモートの Ubuntu でコンパイル作業が行われますが、結果の実行ファイルはローカルの Windows 側にもコピーされるようです。
リリースビルドができなかったり、複数のソースコードによる開発時のストレスとで意外に実用にはまだ遠い感じでした。ライブラリ生成などの検証もやってみる予定でしたが、これらの状況から今ひとつという感じで残念だったのでやらないことにしました。
今後洗練されてくれば VisualStudio で Linux 開発もいけそうなので期待はしています。

linuxプログラミング
すらりんをフォローする
すらりん日記

コメント

タイトルとURLをコピーしました