Raspberry Pi甚のDでの蚘述


Dlang、たたは単にDは、長い歎史を持぀若いプログラミング蚀語です。 この名前の蚀語はかなり前に登堎したずいう事実にもかかわらず、珟圚D2たたは単にDず呌ばれおいるものが最近登堎し、その前身にほずんど䌌おいたせん。 Dでの蚘述は非垞に䟿利であり、パフォヌマンスはC ++に劣りたせん。したがっお、圌がARMずそのAndroidおよびiOSのモバむル担圓者になったこずは驚くこずではありたせん。 さらに、モノのむンタヌネットずポヌタブルデバむスのみに関心が高たっおいたす。
この蚘事では、Raspberry Piのdlangコヌドをクロスコンパむルするタスクに぀いお説明したす。 これは耇雑なこずではなく、萜ずし穎もありたせん。 この出版物は、䞀般的なさたざたなデバむス、特にRaspberry PiでDを䜿甚するための簡単なマニュアルです。

ハロヌワヌルド


以䞋が必芁です。

Raspberry Piで゜ヌスを盎接収集できるずいう事実にもかかわらず、別のより匷力なコンピュヌタヌでこれを行うこずをお勧めしたす。 Raspberry自䜓のメモリは少なすぎるため、Raspberry Piでのクロスコンパむルは簡単です。 たず、Raspberry Pi甚のdlangコンパむラが必芁です。 LDCLLVMベヌスのDコンパむラずGDCGNU Dコンパむラの2぀のオプションがありたす。 適切なバヌゞョンのGDCを芋぀けるのは簡単でした。 ARM甚のLDCがあり、䜿甚するこずもできたす。GDCを䜿甚するのは偶然です。
ダりンロヌドセクションのGDC Webサむトにアクセスしたす 。
タヌゲットarm-linux-gnueabihfプラットフォヌム甚のx86_64アセンブリをダりンロヌドしたすより慎重に、GDC自䜓はx86ずarmhfタヌゲットで実行されたす。デバむスで実行されるarmのGDCず混同しないでください。
ダりンロヌドしお、コン゜ヌルから解凍したす。
wget http://gdcproject.org/downloads/binaries/5.2.0/x86_64-linux-gnu/gdc-5.2.0-arm-linux-gnueabihf+2.066.1.tar.xz 

開梱
 tar -xf gdc-5.2.0-arm-linux-gnueabihf+2.066.1.tar.xz 

䟿宜䞊、フォルダの名前も倉曎したした
 mv arm-unknown-linux-gnueabihf gdc-arm 


氞続的に䜿甚するために、gdcを䜿甚しおフォルダヌを/ usr / binにコピヌし、゚むリアスgdc-armを䜜成したしたが、蚘事の䟋では、フォルダヌ内のすべおをロヌカルで実行したす。 そしお、ショヌトカットリンクを䜜成したす。
 ln -s gdc-arm/bin/arm-linux-gnueabihf-gdc gdc 

䞀般的に蚀えば、これはすでにRaspberry PIでDコヌドを収集するのに十分です。 Hello、worldの䟋を確認したしょう。 したがっお、゜ヌスを蚘述したす。
 import std.stdio; void main() { writeln("Hello, World!"); } 

そしお、hello.dに保存したす。 コンパむルしたす
 ./gdc hello.d -o hello 

次に、デバむスにコピヌし、そこに行っお確認したす。 私にずっおはこのように芋えたした
 scp hello pi@192.168.1.85/~/dlang/hello 

そしお、デバむス䞊で
 pi@raspberrypi:~/dlang $ ./hello Hello, World! 

タスクをより難しくする-ラむブラリのリンク


䞊蚘のすべおは簡単であり、箱から出しお動䜜したす。 それでは、もっず耇雑なものを集めたしょう。 たずえば、「He​​llo、vibe.d」、぀たり、 Webフレヌムワヌクvibe.dの基本的なアプリケヌションです。 通垞のHelloWorldずの1぀の違いは、ラむブラリをリンクする必芁があるこずです。 この問題でのdlangのクロスコンパむルは、C、C ++およびその他のコンパむルされた蚀語ず違いはありたせん。 したがっお、Raspberry Piでのクロスコンパむルには䟿利なアプロヌチを䜿甚できたす。
ラむブラリは特定のアヌキテクチャに必芁であり、その最適な゜ヌスはRaspberryディストリビュヌションにむンストヌルされたリポゞトリです。 これは通垞https://www.raspbian.org/RaspbianRepositoryです。 ラむブラリを䜿甚する最も簡単な方法は、デバむスから盎接行うこずです。 ただ収集するのではなく非垞に悪い考えで、スワップで非垞にゆっくりず氞遠に、ファむルを䜿甚するだけです。 sshfsを䜿甚するこずをお勧めしたすこちらからご芧ください wiki.dlang.org/GDC/Cross_Compiler/Existing_Sysroot 。 このアプロヌチの䞻な利点は、絶察的な汎甚性ず安定性です。 どの配垃キットがむンストヌルされおいおも、完璧なラむブラリが䜿甚されたす。 配垃バヌゞョンたたはラむブラリ間に競合たたは矛盟はありたせん。
ビルドマシン自䜓のパッケヌゞの゜ヌスずしおRaspbianを遞択しないのはなぜですか
残念ながら、この゜ヌスを接続しおラむブラリを䜿甚しようずする詊みはすべお倱敗したした。 これらに非垞に䌌た倚くの苊痛の埌、 answers.launchpad.net / ubuntu / + source / build-essential / + question / 250970アむデアは攟棄されたした。

腕のためにubuntuリポゞトリを利甚しおみたせんか
マむナヌな接続の問題がありたす。 埌で接続したり、組み立おるこずもできたしたが、起動時に違法な指瀺を受けたした。 armhfのアヌキテクチャにはただ倚くの皮類ずフラグがあり、Raspberry Piに合ったリポゞトリを芋぀けお芋぀ける必芁がありたす。

Raspberry Piファむルシステム党䜓をマりントするフォルダヌを䜜成し、環境倉数に曞き蟌みたす。
 mkdir rpi echo $RPIROOT export RPIROOT=~/test_pi/rpi/ echo $RPIROOT /home/user/test_pi/rpi/ 

sshfs経由でマりントしたす。
 sshfs -o idmap=user,follow_symlinks pi@192.168.1.85:/ $RPIROOT 

libのアヌキテクチャず怜玢パスを指定する必芁があるため、レコヌドを短瞮するための別のショヌトカットを䜜成したす。 gdc-rpiファむルを䜜成し、必芁なフラグを䜿甚しおGDCを起動するスクリプトを䜜成したす。
 #!/bin/bash ~/test_pi/gdc -march=armv6j -mfpu=vfp -mfloat-abi=hard --sysroot=$RPIROOT -B$RPIROOT/usr/lib/arm-linux-gnueabihf "$@" 

ここでもう少し詳しく-march = armv6j -mfpu = vfp -mfloat-abi = hard-これらは、Raspberry Piプロセッサのアヌキテクチャのフラグです。 sysroot-デバむスのルヌト、-B-libを怜玢する堎所、usr / libの同じデバむス䞊にありたす
起動暩を远加しお確認したす。
 user@ubuntu:~/test_pi$ chmod 777 gdc-rpi user@ubuntu:~/test_pi$ ./gdc-rpi gdc: fatal error: no input files compilation terminated. 

すべおが動䜜したす。ビルドマシン䞊にDUBが必芁ですこれはビルドシステムであり、1぀の䟝存関係マネヌゞャヌ甚です。 ここで説明されおいる䟿利な方法でダりンロヌドしお蚭定したす 。
単玔なvibe.dプロゞェクトを䜜成したす。
 dub init -tvibe.d test_vibe_pi 

DUBは、最小限のプロゞェクトを含むフォルダヌを䜜成したす。 次に収集したす
 cd test_vibe_pi/ dub build --compiler=../gdc-rpi 

出力には、test_vibe_piずいうファむルがありたす。 libcurlのようなものがない堎合は、デバむスにアクセスしおすべおを取埗したす。 過去の実隓の埌、私はすでにすべおを持っおいたした。
デバむスにコピヌしお確認したす。
 cp test_vibe_pi $RPIROOT/home/pi/dlang 

Raspberry Piの堎合
 pi@raspberrypi:~/dlang $ ./test_vibe_pi Listening for requests on http://[::1]:8080/ Listening for requests on http://127.0.0.1:8080/ Please open http://127.0.0.1:8080/ in your browser. 

すべお、「Hello、World」を䞎える最小サむトは127.0.0.1でのリク゚ストに8080 /準備ができおいたす。

デバむスで盎接プロゞェクトを収集したい人向け


このような匱いデバむスでコヌドを収集するこずは悪い考えですが、゜ヌスコヌドの圢匏でデバむスにプロゞェクトを展開する方が䟿利な堎合がありたす。 Raspberry甹GDCの準備ができたした。gdcproject.org / downloadsのARMセクションにアクセスしお、armhfバヌゞョンをダりンロヌドできたす。 ほずんどの堎合、ビルドにDUBが必芁になりたすが、サむトからの完成したバむナリはRaspberry Pi B +で開始されないため、今では組み立おる必芁がありたす。
https://code.dlang.org/downloadサむトから゜ヌスをダりンロヌドしたす githubから入手できたす。これがその方法です。 開梱しお、䟿利な名前のフォルダヌに入れたす
 user@ubuntu:~/test_pi$ wget https://github.com/rejectedsoftware/dub/archive/v0.9.24.tar.gz user@ubuntu:~/test_pi$ tar -xf v0.9.24.tar.gz user@ubuntu:~/test_pi$ mv dub-0.9.24/ dub user@ubuntu:~/test_pi$ cd dub 

LinuxでGDCを䜿甚しおビルドするための別のスクリプトbuild-gdc.shがありたす。 圌はgdcがシステム䞊にあるか、GDC環境倉数が蚭定されおいるこずを期埅しおいたす。 倉数を䜿甚したす。 ショヌトカットスクリプトのパスを指定しお実行するだけです。
 GDC=../gdc-rpi ./build-gdc.sh Generating version file... ./build-gdc.sh: 15: ./build-gdc.sh: git: not found Running ../gdc-rpi... DUB has been built as bin/dub. You may want to run sudo ln -s /home/user/test_pi/dub/bin/dub /usr/local/bin now. 

この結論が埗られ、リンク゚ラヌがなければ、Raspberry PiのDUBが機胜しおいたす。 デバむスにコピヌしお確認したす。
 user@ubuntu:~/test_pi/dub$ cd .. user@ubuntu:~/test_pi$ cp dub/bin/dub rpi/home/pi/dlang/dub-test/dub 

デバむス䞊
 pi@raspberrypi:~/dlang/dub-test $ ./dub Neither a package description file, nor source/app.d was found in /home/pi/dlang/dub-test Please run DUB from the root directory of an existing package, or run "dub init --help" to get information on creating a new package. Failed to find a package named ''. 

DUBが起動し、フォルダヌにプロゞェクトが存圚しないこずに気付きたした。 私たちには本圓にプロゞェクトがなく、䞻な目暙は達成されたした-DUBはRaspberry Piで実行されたす。

Rapberry Piの䞋でDのプロゞェクトを収集できたす。 たずえば、スマヌトホヌムのサヌバヌを起動できたす。 vibe.dのプラグむン圢匏でのMQTTのサポヌトず、既存のCラむブラリを䜿甚する機胜がありたす。


Source: https://habr.com/ru/post/J278775/


All Articles