[英]Calling C library from Rust gives "LINK : fatal error LNK1181: cannot open input file"
我正在嘗試從 Rust 調用 STM32 Cube Programmer C 庫。
完整代碼和顯示各種嘗試的分支可在此處獲得: https://github.com/becky112358/rust_c_linking_stm32_cube_programmer
main
)按照 Rust Bindgen 教程: https://rust-lang.github.io/rust-bindgen/
這是我的首選方法。 一個 Rust 箱子包裝了 C 庫。 其他 Rust crate 可以包含 Rust wrapper crate,而不必擔心任何 C 庫。
... 理論上。
包裝 C 庫 ( libstm32_cube_programmer_sys
) 的 Rust 板條箱構建正常。 它的測試運行正常。 調用包裝 C 庫( caller
)的 Rust 包裝箱的 Rust 包裝箱未構建,但報告:
= note: LINK : fatal error LNK1181: cannot open input file '.\drivers\CubeProgrammer_API.lib'
為什么caller
還要嘗試查找 C 庫? 我希望libstm32_cube_programmer_sys
能夠處理所有 C 庫到 Rust 的轉換,並且任何 Rust 板條箱然后調用libstm32_cube_programmer_sys
可能是純粹的 Rusty(可能有些不安全)。
build.rs
我最初錯誤地寫了 C 庫名稱,並且libstm32_cube_programmer_sys
沒有構建。 更正庫名稱允許libstm32_cube_programmer_sys
成功構建。 所以看起來libstm32_cube_programmer_sys
確實打開了 C 庫。drivers
文件夾的路徑添加到我的PATH
。println!("cargo:rustc-link-lib=C:/[blah blah]/drivers/CubeProgrammer_API");
如果沒有 Rust 報告,我找不到如何正確輸入路徑:
error: renaming of the library `C` was specified, however this crate contains no `#[link(...)]` attributes referencing this library.
all_in_one
) 在main
分支中,問題似乎可能是libstm32_cube_programmer_sys
可以找到 C 庫,但caller
找不到。 所以我嘗試丟棄單獨的 Rust 包裝箱,並使用一個 Rust 包裝箱,它包裝了 C 庫並調用了 C 函數。
這次我得到以下錯誤,加上一個額外的警告:
= note: caller.59pofysds2mkvvjr.rcgu.o : error LNK2019: unresolved external symbol disconnect referenced in function _ZN6caller4main17ha79648c0a9e86ed0E
.\drivers\CubeProgrammer_API.lib : warning LNK4272: library machine type 'x86' conflicts with target machine type 'x64'
link_search
) 我在 inte.net 上搜索了很多,發現有很多不同的方法可以從 Rust 調用 C 庫。一種方法是使用link-search
而不是link-lib
。 這肯定只會讓編譯器更難,因為你讓它做更多的工作。 但是我被卡住了,需要嘗試不同的東西!
這次我得到以下錯誤,加上獎金警告:
= note: caller.59pofysds2mkvvjr.rcgu.o : error LNK2019: unresolved external symbol __imp_disconnect referenced in function _ZN6caller4main17ha79648c0a9e86ed0E
.\drivers\CubeProgrammer_API.lib : warning LNK4272: library machine type 'x86' conflicts with target machine type 'x64'
我如何使這項工作? 最好從Attempt 1開始,但我會接受任何東西!
當我們有:
C 圖書館 <- Rust 圖書館 <- Rust 代碼
看起來
這是我發布原始問題時的主要誤解。
其他一些提示/提醒:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.