[英]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.