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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Rust

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1167閲覧

ビルドオプションにfeaturesを渡す事で依存関係を変更したい

namuyan

総合スコア76

Rust

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/03/21 15:18

Rustを初めてひと月ほど経過しようとしています。
あるライブラリを制作しました。
ビルド時にfeaturesを渡す事で **”他のRustよりライブラリとして取り込む”ことと”Python用のライブラリを出力する”**ことを行いたいです。

こちらを見て設定しました、下記のようなCargo.tomlが存在するとします。
cargo build --features pylibを実行すると下記の2つの設定が有効になり取り込まれます。

toml

1[target.'cfg(feature = "pylib")'.lib] 2name = "good_lib" 3crate-type = ["cdylib"] 4 5[target.'cfg(feature = "pylib")'.dependencies.pyo3] 6version = "0.6.0-alpha.4" 7features = ["extension-module"]

しかし実際には上手くいきませんでした。

warning: unused manifest key: target.cfg(feature = "pylib").lib Blocking waiting for file lock on the registry index Updating crates.io index error: Package `ed25519-dalek v1.0.0-pre.1` does not have these features: `pylib`

このようなエラーが出ました。
この問題についてなにか解る方は回答の方を宜しくお願いします。

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

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

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

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

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

guest

回答3

0

pylibというfeatureをCargo.tomlの[features]セクションに登録してみてください。

toml

1[features] 2... 3pylib = ["pyo3"]

そしてpyo3のdependencyをoptionalにします。

toml

1[dependencies] 2... 3pyo3 = { version = "0.6.0-alpha.4", features = ["extension-module"], optional = true }

ライブラリのところ [target.'cfg(feature = "pylib")'.lib] は私もどう書くのかよくわからないです。pylib[features] セクションに書くことで、今のままでも使えるようになるかもしれません。

投稿2019/03/21 16:02

tatsuya6502

総合スコア2035

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

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

namuyan

2019/03/21 16:42

解答して頂き有難うございます。Cago.tomlではないですがこちらの文章を見つけました。https://doc.rust-lang.org/reference/linkage.html rustcで用いるようです。複数設定できるようなので`crate-type = ["lib", "cdylib"]`にしてみました。明日にでも検証してみます。
namuyan

2019/03/22 03:53

お昼休みに試してみましたが[lib]の記述があると外部から取り込む事が出来なくなりますね。この部分を解決できないと難しいです。
guest

0

自己解決

結局、featureで場合分けせずに

toml

1[lib] 2name = "same name of package" 3crate-type = ["lib", "cdylib"]

このように二種類の出力をする事にしました。
ただしnameはpackageと同一にしなければなりません。

投稿2019/03/23 07:38

namuyan

総合スコア76

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

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

0

error: Package ed25519-dalek v1.0.0-pre.1 does not have these features: pylib

featureは前もってCargo.tomlの[features]セクションに列挙しておく必要があります

toml

1[features] 2default = [] 3pylib = []

https://doc.rust-lang.org/cargo/reference/manifest.html#the-features-section

おそらく実際には

toml

1[features] 2default = [] 3pylib = ["pyo3"] 4 5[dependencies] 6pyo3 = { version = "0.6.0-alpha.4", features = ["extension-module"], optional = true }

のような形になると思います。

投稿2019/03/21 15:52

編集2019/03/21 15:53
termoshtt

総合スコア136

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問