W10 上的 Rust 和 Python:LNK1181
Rust and Python on W10: LNK1181
我正在尝试编写一个可以从 Python 调用的 Rust 模块。我正在关注此页面:
https://developers.redhat.com/blog/2017/11/16/speed-python-using-rust#edit_src_lib_rs
在 cargo build --release
我得到这个错误:
= note: LINK : fatal error LNK1181: cannot open input file
'python39.lib'
这个问题以前出现过, 似乎是最新的相关答案。
我似乎已经尝试了该答案中所有可能的解决方案,包括定位和 运行 vcvars64.bat,详见 here。不开心。
我安装了 MS Visual Studio (2019),带有 C++ 和 W10 SDK 组件。
重要的是,当我不包含 --release
时,有时不会出现此错误切换。没有它,程序(有时)编译并运行正常。鉴于想要制作 Rust 模块的一个原因是性能,但是,我想解决这个问题。我现在还发现,这种“调试”构建的成功构建是 a) 间歇性的和 b) 部分的:当它失败时,会创建一些所需的输出文件,但不会创建其他文件。
还有...
根据第一个link的页面,似乎在build
之后,我应该在寻找一个以.so结尾的文件。在 W10 OS 我正在寻找一个 .dll 文件。
如果构建完全成功,在target\debug下我有myrustlib.d、myrustlib.dll、myrustlib.dll.exp、myrustlib.dll.lib、 myrustlib.pdb、pyext_myrustlib.pdb、pyext_myrustlib.d 和 pyext_myrustlib.exe。 None 其中 and/or 重命名为 .dll 扩展名,可以作为 Python 模块成功导入,至少如该页面所述。
我也发现 this more recent page 也在做同样的事情。我收到相同的 1181 错误。
python39.lib
我找到了它在我系统中的位置,在 ... Python\Python39\libs 下。我修改了我的 PATH env var 以专门包含此路径(并重新启动)。还是一样的错误。
解决方法:
This page, using PyO3 而不是 rust-cpython(实际上是后者的一个分支),似乎在我的机器上成功地做事 + OS 至少。
注意,在编写第二个示例时似乎包含错字:我认为应该是
fn hashset(_: Python, m: &PyModule) -> PyResult<()> {
而不是
fn hash_set(_: Python, m: &PyModule) -> PyResult<()> {
如果你想让它编译成功(已通知作者)。我已经成功地创建了一个模块(hashset.cp39-win_amd64.pyd 在 W10 OS 中),它成功地使您能够将这个 Rust 构造导入 Python.
我正在尝试编写一个可以从 Python 调用的 Rust 模块。我正在关注此页面:
https://developers.redhat.com/blog/2017/11/16/speed-python-using-rust#edit_src_lib_rs
在 cargo build --release
我得到这个错误:
= note: LINK : fatal error LNK1181: cannot open input file 'python39.lib'
这个问题以前出现过,
我似乎已经尝试了该答案中所有可能的解决方案,包括定位和 运行 vcvars64.bat,详见 here。不开心。
我安装了 MS Visual Studio (2019),带有 C++ 和 W10 SDK 组件。
重要的是,当我不包含 --release
时,有时不会出现此错误切换。没有它,程序(有时)编译并运行正常。鉴于想要制作 Rust 模块的一个原因是性能,但是,我想解决这个问题。我现在还发现,这种“调试”构建的成功构建是 a) 间歇性的和 b) 部分的:当它失败时,会创建一些所需的输出文件,但不会创建其他文件。
还有...
根据第一个link的页面,似乎在build
之后,我应该在寻找一个以.so结尾的文件。在 W10 OS 我正在寻找一个 .dll 文件。
如果构建完全成功,在target\debug下我有myrustlib.d、myrustlib.dll、myrustlib.dll.exp、myrustlib.dll.lib、 myrustlib.pdb、pyext_myrustlib.pdb、pyext_myrustlib.d 和 pyext_myrustlib.exe。 None 其中 and/or 重命名为 .dll 扩展名,可以作为 Python 模块成功导入,至少如该页面所述。
我也发现 this more recent page 也在做同样的事情。我收到相同的 1181 错误。
python39.lib
我找到了它在我系统中的位置,在 ... Python\Python39\libs 下。我修改了我的 PATH env var 以专门包含此路径(并重新启动)。还是一样的错误。
解决方法:
This page, using PyO3 而不是 rust-cpython(实际上是后者的一个分支),似乎在我的机器上成功地做事 + OS 至少。
注意,在编写第二个示例时似乎包含错字:我认为应该是
fn hashset(_: Python, m: &PyModule) -> PyResult<()> {
而不是
fn hash_set(_: Python, m: &PyModule) -> PyResult<()> {
如果你想让它编译成功(已通知作者)。我已经成功地创建了一个模块(hashset.cp39-win_amd64.pyd 在 W10 OS 中),它成功地使您能够将这个 Rust 构造导入 Python.