windows - Rust 链接器寻找 LIB,而不是 DLL

标签 windows rust dllimport

我正在 Windows 上试验 Rust。我的代码声明并调用外部库中的函数。
声明是这样的:

#[link(name = "Rvea0326nc-64")]
extern "C" {
  fn WeibullSpeedProbability(wa: &f32, wk: &f32, qu: &f32, prob: &f32, theerr: &i32) -> ();
}
(都是 ByRef,因为 DLL 是 Fortran。它是用 Intel 编译器构建的。)
请注意,文件名没有扩展名。 DLL 位于 Rust 项目的\target\debug\deps 文件夹中。
根据这里的文档
https://doc.rust-lang.org/std/keyword.extern.html ,这应该在 Windows 上导入一个 DLL,但我收到一个错误,因此:
error: linking with `link.exe` failed: exit code: 1181 
<SNIP>
= note: LINK : fatal error LNK1181: cannot open input file 'Rvea0326nc-64.lib'
果然,如果我找到并复制生成 DLL 的 *.lib 文件,一切正常。 DLL 显然无关紧要。
我曾尝试在链接名称中明确添加“.dll”,但 Rust 只是提示它找不到 Rvea0326nc-64.dll.lib。
文档有错吗?我错过了什么吗?有没有办法让 Rust 与 DLL 一起工作?
更新 : 我发现直接运行 Rust 编译的可执行文件时,需要 DLL 而不需要 LIB。

最佳答案

如果对 Rust 中的 FFI 没有太多经验,我可以想象编译您的程序,您将需要 .lib安装在您的机器上,以便 rustc 可以正确检查 FFI 功能是否正确。然后当生成的二进制文件运行时,它会加载 .dll在运行时并使用它。
尝试查看是否在使用 .lib 生成二进制文件后安装,您可以在没有 .lib 的情况下运行该二进制文件安装。

关于windows - Rust 链接器寻找 LIB,而不是 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63394094/

相关文章:

c++ - 我可以使用成员函数作为 EnumWindows 的第一个参数吗

rust - 如何在 Rust 中获取向量中的最小值?

rust - 如何使用 conservative_impl_trait 返回对迭代器的引用?

c# - .NET 程序集中 BadImageFormatException 的其他原因?

java - 适用于 Windows 的网络适配器

javascript - 设置文件属性 filesystemobject javascript

.net - 为什么我无法在 .NET 中捕获某些异常类型?

DLLImport中的C#错误查找方法

eclipse - 移动 Maven .m2 文件夹

rust - 闭包中引用的生命周期