Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows Rust链接器寻找一个库,而不是DLL_Windows_Rust_Dllimport - Fatal编程技术网

Windows Rust链接器寻找一个库,而不是DLL

Windows Rust链接器寻找一个库,而不是DLL,windows,rust,dllimport,Windows,Rust,Dllimport,我正在试验窗户上的锈。我的代码声明并调用外部库中的函数 宣言是这样的: #[链接(name=“Rvea0326nc-64”)] 外部“C”{ fn WeibullSpeedProbability(wa:&f32,wk:&f32,qu:&f32,prob:&f32,theerr:&i32)->; } (这都是ByRef,因为DLL是Fortran。它是用英特尔编译器构建的。) 请注意,文件名没有扩展名。DLL位于Rust项目的\target\debug\deps文件夹中 根据这里的文件 ,这应该

我正在试验窗户上的锈。我的代码声明并调用外部库中的函数

宣言是这样的:

#[链接(name=“Rvea0326nc-64”)]
外部“C”{
fn WeibullSpeedProbability(wa:&f32,wk:&f32,qu:&f32,prob:&f32,theerr:&i32)->;
}
(这都是ByRef,因为DLL是Fortran。它是用英特尔编译器构建的。)

请注意,文件名没有扩展名。DLL位于Rust项目的\target\debug\deps文件夹中

根据这里的文件 ,这应该在Windows上导入DLL,但我得到一个错误,因此:

error: linking with `link.exe` failed: exit code: 1181 
<SNIP>
= note: LINK : fatal error LNK1181: cannot open input file 'Rvea0326nc-64.lib'
错误:与'link.exe'链接失败:退出代码:1181
=注意:链接:致命错误LNK1181:无法打开输入文件“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
的情况下运行该二进制文件。

谢谢。你的直觉完全正确。编译时需要Lib,但运行时需要DLL。C++也是这样,所以我应该已经解决了。大多数情况下,我使用的是其他客户机语言,它们可以根据DLL本身进行编译(但如果在导入声明中出错,则会在运行时失败)。