質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

Q&A

解決済

3回答

1500閲覧

rustcでgcc -c のようにmain関数のないソースをコンパイルする方法

mask_mus

総合スコア37

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

0グッド

0クリップ

投稿2021/05/15 19:31

編集2021/05/16 11:57

Rustで以下のようなソースをコンパイルしてwasmにしたいのですが、mainがないと怒られてしまいます。
mainがあってもいいのですが、c言語のオブジェクトコンパイルのような機能はrustcにないのでしょうか?

rust

1#[no_mangle] 2pub extern fn sum(a :i32, b :i32) -> i32{ 3 a + b 4}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatsuya6502

2021/05/16 01:58

この質問にはC言語の知識だけあっても答えられないので、Cのタグは外した方が良さそうですね。
mask_mus

2021/05/16 11:58

ご指摘いただきありがとうございます。C言語のタグは外しました!
guest

回答3

0

rustcが生成する成果物の種類(クレートタイプ)はデフォルトでbinになっています。そしてこのクレートタイプはmain関数を要求します。

ターゲットがwasmのときはクレートタイプcdylibを使用してください。こちらはmain関数を要求しません。ソースファイルがsrc/lib.rsにあるときは、以下のように実行します。

console

1$ rustc -O --crate-type cdylib --crate-name sum \ 2 --target wasm32-unknown-unknown src/lib.rs

これでカレントディレクトリーにsum.wasmというファイルができます。

ただ、このファイルには余分な情報が入っており、ファイルサイズが大きくてWebでの利用には適しません。試しに手元で生成してみたところ、ファイルサイズは1.5MBもありました。wasm-optなどのツールを使うことで余分な情報を削除できますが、それらを手動で実行するのは面倒です。

また、文字列などwasmで直接扱えないデーター型が多くあり、それらを簡単に扱えるクレート(ライブラリー)も必要になります。

Rustによるwasm開発を支援するために、Rustプロジェクト公式のツールがいくつか用意されてます。それらを使うことも検討してみてください。

  • wasm-bindgen:wasmとJavaScript間の連携に必要な機能を提供するクレート。文字列型などを提供し、連携に必要なJavaScriptコードなどを自動生成してくれる
  • wasm-pack:wasmによるWeb開発やnpmパッケージの作成を助けてくれるコマンドラインツール。wasm-optなどの最適化ツールも自動的に適用してくれる

投稿2021/05/16 01:56

編集2021/05/16 05:05
tatsuya6502

総合スコア2035

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

投稿2021/05/15 23:26

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Command-line arguments
“--emit: specifies the types of output files to generate”

投稿2021/05/15 20:49

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mask_mus

2021/05/15 22:23

ご回答いただきありがとうございます! 試してみましたが、同じエラーが出てしまいコンパイルされません。。 試したコマンド: $ rustc sum.rs --target=wasm32-unknown-unknown --emit=obj
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問