如何解决Rust链接器寻求LIB,而不是DLL
我正在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
的情况下运行该二进制文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。