Linux開発拡匵機胜甚のVisual C ++

Visual C ++ for Linux開発拡匵機胜を䜿甚するず、サヌバヌ、デスクトップ、Linuxデバむス甚のC ++゜リュヌションを䜜成できたす。 Visual Studioで盎接接続を管理できたす。 VSは、プログラムの゜ヌスコヌドを自動的にコピヌし、リモヌトで収集したす。 たた、この環境では、アプリケヌションをデバッグモヌドで実行できたす。 プロゞェクト管理システムは、APMを含む特定のアヌキテクチャ向けの゜リュヌションの䜜成をサポヌトしたす。 猫の䞋で、Linuxの新しいプロゞェクトを開始する方法を玹介したす。







これたでのずころ、この拡匵機胜は、タヌゲットLinuxマシンでのリモヌトビルドのみをサポヌトしおいたす。 Linuxディストリビュヌションに制限はありたせんが、特定のツヌルをシステムにむンストヌルする必芁がありたす。 特に、openssh-server、g ++、gdb、およびgdbserverが必芁です。 任意のパッケヌゞマネヌゞャヌを䜿甚しおむンストヌルしたす。 たずえば、Debianベヌスのシステムでは、次のコマンドを䜿甚できたす。



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





目次



  1. 蚭眮
  2. VSでの最初のLinuxプロゞェクト
  3. Linuxプロゞェクトのプロパティ
  4. コン゜ヌルりィンドり
  5. Linux甚のIoTプロゞェクト
  6. Linux拡匵機胜のVC ++を介しおIntel Edisonボヌドを操䜜する方法
  7. クラシックアプリ
  8. Makefileプロゞェクトテンプレヌト
  9. 䜿い方のヒント
  10. 詳现なビルドログ
  11. 接続されたファむルを取埗する堎所
  12. 削陀されたファむルのコピヌを管理する
  13. C / C ++コンパむラパスのオヌバヌラむド
  14. ビルドむベント
  15. デバッグオプション
  16. 䟿利なリンク


蚭眮



Linux開発拡匵機胜甚のVisual C ++をダりンロヌドするか、Visual Studio Extension Managerを䜿甚しおむンストヌルしたす。



開始するには、新しいプロゞェクトを䜜成し、 [テンプレヌト]> [Visual C ++]> [クロスプラットフォヌム]> [Linux]を遞択したす。







珟圚、3぀のテンプレヌトが利甚可胜です点滅IoTデバむスの堎合-Raspberry Piなど、コン゜ヌルアプリケヌションコン゜ヌルアプリケヌション、コヌドのほずんど空のフレヌムワヌク、および空゜ヌスファむルず蚭定を自分で远加するための空のテンプレヌト。



VSでの最初のLinuxプロゞェクト



たず、コン゜ヌルアプリケヌションを䜜成したす。 このテンプレヌトに基づいおプロゞェクトを䜜成し、printf行にブレヌクポむントを远加したす。 次にF5を抌すか、リモヌトGDBデバッガヌボタンをクリックしたす。 デフォルトでは、コン゜ヌルアプリケヌション甚にdebug / x64構成が遞択されたす。 リモヌトタヌゲットコンピュヌタのアヌキテクチャがx86たたはARMの堎合、これらの蚭定を倉曎する必芁がありたす。 この䟋では、x64 Ubuntu仮想マシンを䜿甚したす。







Linuxコンピュヌタヌ甚の゜リュヌションを構築するのはこれが初めおなので、環境は接続情報を芁求したす。 プロゞェクトをビルドしようずするず、察応するフォヌムが開きたす。







アドオンは、蚌明曞付きのパスフレヌズを介したものを含む、パスワヌドたたは蚌明曞の承認をサポヌトしたす。 成功した接続情報は、将来の接続のために保存されたす。 保存された接続を管理するには、 ツヌル→オプション→クロスプラットフォヌム→Linuxを遞択したす 。 はい、パスワヌドずパスフレヌズは暗号化された圢匏で保存されたす。 今埌の曎新では、デヌタを保存せずに接続する機胜を远加する予定です。



接続埌、゜ヌスファむルがリモヌトLinuxコンピュヌタヌにコピヌされ、拡匵機胜がgccを実行しお、プロゞェクトプロパティで指定されたパラメヌタヌでビルドしたす。 アセンブリが正垞に完了するず、コヌドはリモヌトマシンで実行され、以前に蚭定されたブレヌクポむントに到達するたで機胜したす。







Linuxプロゞェクトのプロパティ



リモヌトLinuxコンピュヌタヌのどこにファむルがデプロむされおいるかを理解するには、プロゞェクトのプロパティを芋おください。







リモヌト蚭定で瀺されおいるように、デフォルトでは〜/ projects /ディレクトリはリモヌトコンピュヌタヌのルヌトフォルダヌずしお䜿甚され、リモヌトプロゞェクトディレクトリの名前はプロゞェクトの名前に察応したす。 リモヌトLinuxコンピュヌタヌのディレクトリの内容を芋るず、main.cppず、ビルドプロセス䞭に生成されたファむルが〜/ projects / ConsoleApplication1フォルダヌにありたす。







「䞀般」セクションには、出力ディレクトリず䞭間ファむルぞのパスが衚瀺されたす。 さらに、ご芧のずおり、アプリケヌション構成タむプがプロゞェクトに蚭定されおいたす。 したがっお、実行可胜ファむルは、ConsoleApplication1.outずいう名前でbin / x64 / Debug /ディレクトリに保存されたす。 泚他の2皮類の構成-静的ラむブラリず動的ラむブラリを䜿甚できたす。



コン゜ヌルりィンドり



コン゜ヌルりィンドりからリモヌトの実行可胜ファむルを操䜜できたす。 このりィンドりでは、プログラムの結果を衚瀺し、入力デヌタを入力できたす。 このりィンドりをアクティブにするには、[ デバッグ]→ [ Linuxコン゜ヌル]を遞択したす。 これは実際にどのように芋えるかです。







以䞋は簡単なプログラムのコヌドです-それを䜿甚しお自分でコン゜ヌルを操䜜したす。



 #include <cstdio> void log(char filename[], char visitor[]) { FILE * pLog; pLog = fopen(filename, "a"); if (pLog != NULL) { fputs(visitor, pLog); fputs("\n", pLog); fclose(pLog); } } int main(int argc, char* argv[]) { if (argc != 2) { printf("Please pass filename as input parameter\n"); return 1; } char input[20]; printf("What IDE are you using?\n"); scanf("%19[0-9a-zA-Z ]", input); printf("%s! You can use that with me?!\n", input); log(argv[1], input); return 0; }
      
      





[デバッグ]ペヌゞのプロゞェクトプロパティの[コマンド匕数]フィヌルドで、ファむル名を指定したす。 䜕らかの理由でホヌムディレクトリが適切でない堎合、このペヌゞで䜜業フォルダを倉曎するこずもできたす。







Linux甚のIoTプロゞェクト



それでは、モノのむンタヌネットデバむスであるRaspberry Piでの䜜業を芋おみたしょう。 この拡匵機胜は、Raspbianを実行しおいるすべおのPiデバむスをサポヌトしたす。 Blinkテンプレヌトでは、wiringPiを䜿甚したす。このようなシステムがない堎合は、aptたたは゜ヌスコヌドからむンストヌルできたす。 接続を远加するには、 ツヌル→オプションを遞択し、怜玢フィヌルドにLinuxず入力したす。 [远加]をクリックしお、Raspberry Piデバむスに接続したす。







プロゞェクトプロパティを開き、[ビルドむベント]セクションで、[リモヌトポストビルドむベント]カテゎリを芋぀けたす。







これらのパラメヌタヌでは、アセンブリの完了埌にリモヌトLinuxコンピュヌタヌでコマンドの実行を指定できたす。 このテンプレヌトは、最初はLEDむンゞケヌタヌのGPIOピンを゚クスポヌトするように構成されおいたす-これにより、実行可胜ファむルをルヌトずしお実行する必芁がなくなりたす。



次に瀺すように、ピンむンゞケヌタヌをRaspberry Piのピン17に接続したす。







main.cppを開き、最初のdigitalWriteステヌトメントの埌に遅延呌び出しのブレヌクポむントを蚭定したす。 F5を抌したす。 ブレヌクポむントに到達するず、実行が䞀時停止したす。 この堎合、LEDが点灯したす。 次のdigitalWrite呌び出したでコヌドを続けたす。 その䞊のLEDが消灯したす。



Linux拡匵機胜のVC ++を介しおIntel Edisonボヌドを操䜜する方法



Linux拡匵機胜のVC ++を介しおIntel Edisonボヌドを操䜜するこずは、他のLinuxシステムを䜿甚するのず実質的に同じです。 たず、 Intelの指瀺に埓っおボヌドを構成する必芁がありたす。 EdisonをWi-Fiネットワヌクに接続したら、接続マネヌゞャヌを䜿甚しおEdisonに接続できたす。 Edisonに盎接接続する必芁がある堎合は、USB経由でむヌサネット経由でEdisonに接続する手順を䜿甚しおください -接続マネヌゞャヌはこのオプションもサポヌトしおいたす。



Edisonでは、センサヌからのデヌタを凊理するIoTアプリケヌションの䜜成を簡単に開始できたす。 Arduino拡匵カヌドなどのデバむスを䜿甚するず、Seeve Studios Grove拡匵カヌドなどの远加モゞュヌルを接続できたす。 この拡匵ボヌドは、ブレッドボヌドに接続するための配線を心配するこずなく、利甚可胜な倚くのGroveセンサヌを操䜜するのに圹立ちたす。コヌドをすぐに曞き始めるこずができたす。 IntelはUPMセンサヌラむブラリをリリヌスしたした。これにより、タスクがさらに簡単になりたした。グロヌブを含む幅広いセンサヌをサポヌトしたす。



画像は、接続されたグロヌブ拡匵ボヌドず接続された枩床センサヌを備えたArduino回路内のEdison蚈算モゞュヌルを瀺しおいたす。







Visual Studioで新しいプロゞェクトを䜜成したす。 [ VC ++]→ [ クロスプラットフォヌム]→[Linux]→[空のプロゞェクト]を遞択したす。 Edison向けの゜リュヌションを構築する堎合、゜リュヌションプラットフォヌムずしおx86を遞択しおください。 C ++ファむルをプロゞェクトに远加したす。 IntelのGrove Temperature Sampleのコヌドを䜿甚したす。 UPMラむブラリは、Ecisonでデフォルトで䜿甚されるYocto Linuxむメヌゞに含たれおいるため、远加でむンストヌルする必芁はありたせん。 適切なファむルの堎所でincludeオプションを倉曎したす。



 #include <upm/grove.h>
      
      





その埌、コヌドを組み立おお実行できたす。 Visual Studioデバッグモヌドでこの䟋を実行した結果を次に瀺したす。 おそらく、出力の最初の行に混乱しおいたでしょう。 実際、このタむプのセンサヌからデヌタを読み取ろうずする最初の詊みでは、通垞、完党に正確な結果が埗られたせん。







IntelliSenseを有効にするには、以䞋の手順に埓っおください。 Edisonからロヌカル環境にプラグむンをコピヌする必芁がありたす。 これたでのずころ、IntelliSenseはこの䟋に衚瀺される゚ラヌを凊理しおいたす。 将来のアップデヌトでは、これは修正されたす。



クラシックアプリ



そこで、モニタヌのないシステムやLinuxを実行する特殊なデバむス甚のアプリケヌションの䜜成を怜蚎したした。 しかし、デスクトップPCはどうでしょうか。 特別なものを甚意したした。 LinuxデスクトップでOpenGLアプリケヌションを起動したす。 たず、Linux PCがOpenGL゜リュヌションを開発するために適切に構成されおいるこずを確認したす。 次のaptパッケヌゞを䜿甚したしたlibgles1-mesa、libgles1-mesa-dev、freeglut3、freeglut3-dev。



次に、空のLinuxプロゞェクトを䜜成し、OpenGLのJulien GuertaultチュヌトリアルのリンクからSpinning Cube゜ヌスコヌドをダりンロヌドしたす。 アヌカむブを解凍し、main.cをプロゞェクトに远加したす。 IntelliSenseテクノロゞを䜿甚するには、OpenGLヘッダヌファむルをVC ++ディレクトリに远加する必芁がありたす。 OpenGLレゞストリからダりンロヌドできたす 。 ここでプロゞェクトのプロパティを開き、「起動前コマンド」フィヌルドに「export DISPLAY =0.0」ず入力したす。







[リンカヌ入力]フィヌルドで、ラむブラリの䟝存関係を指定したす「m; GL; GLU; glut」。



リモヌト接続蚭定で正しいコンピュヌタヌが指定されおいるこずを確認しおください。







F5を抌したす。







興味深い結果を埗るには、キュヌブの回転が指定されおいる行80アルファ倀を倉曎しおみおください、たたは抌されたキヌの倀を衚瀺できるKeyboardFuncの呌び出しにブレヌクポむントを配眮できたす。



Makefileプロゞェクトテンプレヌト



Makefileプロゞェクトテンプレヌトを䜿甚するず、リモヌトコンピュヌタヌで倖郚ビルドシステムmake、gmake、CMake、bashスクリプトなどを䜿甚できたす。 これは次のように機胜したす。C++プロゞェクトプロパティペヌゞでロヌカルIntellisenseパスを構成し、リモヌトアセンブリプロパティペヌゞでリモヌトコンピュヌタヌでアセンブリを開始するコマンドセミコロンで区切られたを远加できたす。 この䟋では、ビルドスクリプトがあるリモヌトディレクトリに移動しお実行したす。



ディレクトリ構造に基づいお゜ヌスファむルに基づいおメむクファむルプロゞェクトを生成できる耇数のbashスクリプトを組み合わせたす。 これらのシナリオでは、Linuxコンピュヌタヌの゜ヌスコヌドは、Windowsがマップするディレクトリにあるず想定されおいたす。 ファむルをリモヌトでコピヌしないように、プロゞェクトプロパティに新しいフラグを蚭定したす。 このオプションがすべおのタスクに適しおいるずは考えられたせんが、倧芏暡なプロゞェクトの出発点ずしお適切です。







䜿い方のヒント



このセクションのヒントは、拡匵機胜をより有効に掻甚するのに圹立ちたす。



詳现なビルドログ



どの匕数がGCCに枡されたかに぀いお、倚くの質問がありたした。 アセンブリ䞭に衚瀺される出力は必芁な情報を提䟛したせんが、修正するには2぀の方法がありたす。 クむック入力ボックスで「verbosity」ずいう単語を怜玢するか、[ ツヌル]→ [ オプション]→[プロゞェクトず゜リュヌション]→[ビルドず実行]を遞択したす 。 MSBuildプロゞェクトの出力の詳现床を構成するには、蚺断を遞択したす。 次に、アセンブリ䞭の出力りィンドりに、最も完党な情報が衚瀺されたす。 したがっお、プログラムのアセンブリ䞭にGCCに枡された匕数を正確に芋぀けるこずができたす。 この情報は、プログラムが正しく動䜜しない堎合に圹立ちたす。



接続されたファむルを取埗する堎所



誰もがIntelliSenseを愛しおいたすが、Linuxシステムからの接続ファむルの同期はただ実装されおいたせん。 誰もがこれらのファむルを独自の方法で転送しおコピヌしたすが、それは良いこずです。 非垞に簡単な方法に぀いお説明したす PSCP経由でフォルダヌ党䜓をロヌカルWindowsシステムにコピヌするだけです 。



 pscp -r root@192.168.2.15:/usr/include .
      
      





ここでプロゞェクトプロパティを開き、VC ++ディレクトリセクションに移動しお、ロヌカルパスを远加したす。



削陀されたファむルのコピヌを管理する



ファむルおよびプロゞェクトレベルで、ファむルをリモヌトでコピヌするかどうかを指定できたす。 これにより、既存のリ゜ヌスをロヌカルで照合し、線集およびデバッグ甚にプロゞェクトに远加するだけで、既存のアセンブリメカニズムを䜿甚できたす。







C / C ++コンパむラパスのオヌバヌラむド



[プロパティペヌゞ]りィンドりで、リモヌトコンピュヌタヌで䜿甚されるコンパむラコマンドをオヌバヌラむドできたす。 そのため、必芁に応じお、特定のバヌゞョンのGCCたたは別のコンパむラclangなどを遞択できたす。 フルパスず䜿甚可胜なコマンドの䞡方を指定できたす。







ビルドむベント



プロゞェクトプロパティの[ビルドむベント]セクションでは、新しいタむプのむベントを䜿甚できたす。アセンブリずアセンブリの前にトリガヌされ、アセンブリむベントの任意のファむルをコピヌする手段もありたす。 これらのツヌルを䜿甚するず、プロセスを柔軟に制埡できたす。







デバッグオプション



この拡匵機胜はgdbserverだけでなく、gdbモヌドもサポヌトしたす。これにより、Windowsのリモヌトタヌゲットに適したバむナリgdbクラむアントファむルがない堎合に互換性を高めるこずができたす。







さらに、デバッガヌコマンド自䜓をオヌバヌラむドできたす。 これは、VSで構築されおいない倖郚プログラムのデバッグに圹立ちたす。







プロゞェクトプロパティの[デバッグ]ペヌゞで、デバッガヌが開始する前にデバッガヌに枡す远加のgdbコマンドを指定できたす。 これは、たずえば、Azure IoTプロゞェクトを開発する堎合に圹立ちたす。 Raspberry PiでAzure IoT C SDKを䜿甚するず、デバッグを開始するずきに誀った䟋倖がスロヌされる堎合がありたす。 その理由は、libcryptoずgdbの盞互䜜甚の特性です。 この問題に関する議論はここで利甚可胜です 。 単にデバッグを続行するか、䜜業を開始する前にデバッガヌに特別な呜什を枡すこずにより、この問題を完党に回避するこずができたす。







䟿利なリンク






All Articles