crossメモ [blessed.rsシリーズ5]
概要
こちらのリストにあるものを見て書いたメモの共有です。
内容はまとめておらず、順番もぐちゃぐちゃ。あくまでメモになります。
また、網羅的にメモしているわけではなく、自分が必要だと思ったもののみメモしているため、内容が偏っているかもしれません。
今回はcrossについてです。
crossとは
クロスコンパイルを行うためのツール
クロスコンパイルとは
クロスコンパイルは、コンパイラが実行されているプラットフォーム以外のプラットフォーム向けの実行可能コードを作成するプロセス
プラットフォームの違いとは、OSが異なることやアーキテクチャが異なること
動かし方の例
WSL上で開発を行いWindows上でそれを実行する例
dockerを起動しておく必要がある
私の環境だと以下を実行
$ sudo service docker start
そのあとは以下の記事の通りに
基本的にはcargoと同じCLIを持っており、cargo build
などのかわりにcross build
とすればよいらしい
依存
通常はrustupを使用していると思うのでinstall方法については心配はいらない
rustup以外を使用している場合は上記を参照
またdefaultだとdockerを使用してクロスコンパイルを実現している
docker以外を使用する場合も上記を参照
また、dockerを使用する場合は、権限の問題が発生する可能性があるため注意
設定
色々な設定方法・内容があるため上記を参照
dockerの中でクロスコンパイルを行う
コンテナ内でクロスコンパイルを実行する場合は、ホストのdockerデーモン自体にcrossがアクセスできるようにする必要がある
詳細は上記を参照
テスト時の注意
こちらに書いてある通りであれば、cross test
ではスレッドは1つで実行されるようである
テストやそのほかrun
時にはコンテナ内でQEMUを使用しているようで(必ず使用しているわけではないかもしれない。CPUが異なるときだけ?:https://qiita.com/termoshtt/items/12f9dbb5425a94a4e545#qemu )、その関係でスレッドを複数作成するとうまくいかないことがあり、このようになっているようである
対応しているターゲット
参考
詳しい内容についてはcrossのwikiが参考になりそう
CIについてなどものっている
WSL2でWindows環境のテストをするときの注意(未解決)
WSL2でwindows環境のテストをする際、通常であれば以下のようにすることで実行ができる
$ cross test --target x86_64-pc-windows-gnu
しかし以下のエラーが発生
こちらに書いてある通りDocker Desktopでの設定で問題が解決する場合もあるようだが、私の環境では解決しなかった
なお、いくつか試したところ、私の環境(WSL2)だとi686-pc-windows-gnu
で同様のエラーになり、そのほかのいくつか(aarch64-unknown-linux-gnu
、i686-unknown-linux-gnu
など)では問題なく実行ができた
Discussion