Cのライブラリファイルのみを持っているような状況で、それをRustに組み込んで使いたいがCargoでビルドするときに "-L" フラッグをうまく渡せない
環境
- Windows10
- Rust 1.50.0
状況
ある装置を制御するためのCライブラリがメーカーに提供されているのですが、ソースコード自体はなくて .lib
ファイルのみが提供されています。これをRust内で使うために
bash
1. 2├── Cargo.lock 3├── Cargo.toml 4├── c 5│ └── lib 6│ ├── TUSB16AD.h 7│ └── TUSB16AD.lib 8└── src 9 ├── TUSB16AD.dll 10 └── lib.rs
というディレクトリ構成でコードを書いています。Cライブラリを使うRust側のコードは lib.rs
に今のところ書いていて、
rust
1#[link(name = "TUSB16AD", kind = "static")] 2extern "C" { 3 fn TUSB0216AD_Device_Open(id: i32) -> i32; 4 fn TUSB0216AD_Device_Close(id: i32); 5} 6 7#[allow(dead_code)] 8pub fn device_test() { 9 let e: i32; 10 unsafe { 11 e = TUSB0216AD_Device_Open(1); 12 } 13 if e != 0 { 14 println!("Error code: {}", e); 15 } 16 17 unsafe { 18 TUSB0216AD_Device_Close(1); 19 } 20}
という動作確認をするだけのコードを書いています。
これをビルドするために、
bash
1rustc -L../c/lib lib.rs
として(ビルドを成功させるためだけに)lib.rs
にmain関数を追加するとうまくビルドできるのですが、cargo build
すると
bash
1config.toml` 2 Compiling mytestproject v0.1.0 (C:\Users\xxx\mytestproject) 3error: could not find native static library `TUSB16AD`, perhaps an -L flag is missing? 4 5error: aborting due to previous error 6 7error: could not compile `mytestproject` 8 9To learn more, run the command again with --verbose.
となってしまいます。
試したこと
.cargo
ディレクトリ下にconfigファイルを置けるということを知ったので .cargo
ディレクトリを作ってその下に config.toml
を作って
toml
1[build] 2rustflag = "-L./c/lib"
と書いたのですが、ビルドすると同じエラーが出て、
bash
1warning: unused config key `build.rustflag` in `C:\Users\xxx\mytestproject.cargo\config.toml`
となります。
どうすれば cargo build
コマンドでちゃんとビルドできるでしょうか?
回答1件
あなたの回答
tips
プレビュー