6

rlib の代わりに共有ライブラリを発行するようにRacerを変更しようとしています。

これを行うために、Cargo マニフェストcrate-type = ["dylib"]のセクションに追加し、実行しました。これはうまく機能し、放出されました。[lib]cargo build --liblibracer.so

残念ながら、ライブラリの静的バージョンに依存する Racer バイナリをビルドできませんでした。実行中のcargo build苦情:

   Compiling racer v1.0.0 (file:///home/georgev/dotfiles/vim/bundle/racer)
error: cannot satisfy dependencies so `std` only shows up once
help: having upstream crates all available in one format will likely make this go away
error: cannot satisfy dependencies so `core` only shows up once
help: having upstream crates all available in one format will likely make this go away
error: cannot satisfy dependencies so `collections` only shows up once
help: having upstream crates all available in one format will likely make this go away
error: cannot satisfy dependencies so `rustc_unicode` only shows up once
help: having upstream crates all available in one format will likely make this go away
error: cannot satisfy dependencies so `alloc` only shows up once
help: having upstream crates all available in one format will likely make this go away
error: cannot satisfy dependencies so `libc` only shows up once
help: having upstream crates all available in one format will likely make this go away
error: cannot satisfy dependencies so `rand` only shows up once
help: having upstream crates all available in one format will likely make this go away
error: aborting due to 7 previous errors
Could not compile `racer`.

を に変更するcrate-type["dylib", "bin"]、コンパイルが成功しました。ただし、cargo build --lib共有ライブラリはもう発行しません (rlib のみ)。

ビルドしたいライブラリのタイプを指定しながら、そのライブラリを実行可能ファイルに含めるために静的にビルドできるようにするにはどうすればよいですか?

4

1 に答える 1

9

binは有効なcrate-type値ではありません。有効な値は、、、、rlibおよびです。クレートの種類を変更するlibstaticlibdylib

crate-type = ["dylib", "rlib"]

あなたが求めている行動を引き起こします。

rlib のみが発行される理由は、現在、rlib のみを生成する["dylib", "bin"]ために無効な値を引き起こす Cargo バグがあるためです。この問題を修正するためにプル リクエストcrate-typeを提出しました。

于 2015-08-17T16:23:30.053 に答える