rust Windows上的pnet Crate编译问题=注意:链接:致命错误LNK1181:无法打开输入文件“Packet.lib”

nlejzf6q  于 2023-10-20  发布在  Windows
关注(0)|答案(1)|浏览(633)

说明:

我试图在使用pnet crate的Windows机器上编译Rust程序。尽管已经安装了所有必需的工具和依赖项,编译仍然失败。

环境:

  • 操作系统:Windows 10
  • Rust版本:1.72

复制步骤:

1.使用cargo new my_pnet_project创建新的Rust项目。
1.将pnet机箱添加到Cargo.toml

[dependencies]
pnet = "0.25"  # Replace with the version you want

1.在项目目录中运行cargo build

预期行为:

该项目应编译没有任何问题。

实际行为:

编译失败,并显示以下错误消息:

= note: /usr/bin/x86_64-w64-mingw32-ld: cannot find -lPacket: No such file or directory
collect2: error: ld returned 1 exit status
error: could not compile `atlantic` (bin "atlantic") due to previous error

Caused by:
  process didn't exit successfully: `/home/erdt-cyber/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/bin/rustc --crate-name atlantic --edition=2021 src/main.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=214 --crate-type bin --emit=dep-info,link -C embed-bitcode=no -C debuginfo=2 -C metadata=bc075ce29cde910a -C extra-filename=-bc075ce29cde910a --out-dir /home/erdt-cyber/Documents/gitHub/Atlantic/target/x86_64-pc-windows-gnu/debug/deps --target x86_64-pc-windows-gnu -C incremental=/home/erdt-cyber/Documents/gitHub/Atlantic/target/x86_64-pc-windows-gnu/debug/incremental -L dependency=/home/erdt-cyber/Documents/gitHub/Atlantic/target/x86_64-pc-windows-gnu/debug/deps -L dependency=/home/erdt-cyber/Documents/gitHub/Atlantic/target/debug/deps --extern csv=/home/erdt-cyber/Documents/gitHub/Atlantic/target/x86_64-pc-windows-gnu/debug/deps/libcsv-29d015f24057f58e.rlib --extern pnet=/home/erdt-cyber/Documents/gitHub/Atlantic/target/x86_64-pc-windows-gnu/debug/deps/libpnet-d2ad988bcd6db621.rlib --extern serde=/home/erdt-cyber/Documents/gitHub/Atlantic/target/x86_64-pc-windows-gnu/debug/deps/libserde-06112e241e2deea9.rlib -L native=/home/erdt-cyber/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winapi-x86_64-pc-windows-gnu-0.4.0/lib` (exit status: 1)

尝试的故障排除步骤:

  • 已确认已安装Visual Studio生成工具。
  • 已尝试以管理员身份运行终端。
  • 我尝试了mscv gnu和llvm,得到了这个:
= note: LINK : fatal error LNK1181: cannot open input file 'Packet.lib'

warning: `pnet_test` (bin "pnet_test") generated 1 warning
error: could not compile `pnet_test` (bin "pnet_test") due to previous error; 1 warning emitted

Caused by:
  process didn't exit successfully: `rustc --crate-name pnet_test --edition=2021 src\main.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=206 --crate-type 
bin --emit=dep-info,link -C opt-level=3 -C embed-bitcode=no -C metadata=c113a3f6c480f8f2 --out-dir C:\Users\erdt-cyber\Documents\atl_win\target\release\deps -L dependency=C:\Users\erdt-cyber\Documents\atl_win\target\release\deps --extern pnet=C:\Users\erdt-cyber\Documents\atl_win\target\release\deps\libpnet-554e6b6d6eddfb2c.rlib -L native=C:\Users\erdt-cyber\.cargo\registry\src\index.crates.io-6f17d22bba15001f\pnet-0.34.0/lib/x64` (exit code: 1)

附加说明:

请提供有关解决此问题的指导或故障排除步骤以进一步诊断此问题。

atmip9wb

atmip9wb1#

**标题:**Rust:使用WinPcap库时解决LNK1181错误
答案:

我在编译依赖于Windows上的WinPcap库(Packet.lib)的Rust项目时遇到了类似的问题。下面是我如何解决“致命错误LNK1181:无法打开输入文件'Packet.lib'“错误:
1.安装Windows SDK和WinPcap Developer Kit:
确保您的系统上安装了Windows SDK和WinPcap开发人员工具包(v4.1.2或您所需的版本)。
1.找到Packet.lib库:
在系统上找到Packet.lib库文件。在我的例子中,我将它定位在C:\Users\erdt-cyber\Downloads\WpdPack_4_1_2\WpdPack\Lib\x64\Packet.lib中。这是我们在Rust项目中需要链接到的库。
1.将Packet.lib放入Visual Studio库目录:
Packet.lib文件复制到Visual Studio库目录。路径可能会因您的Visual Studio版本和安装位置而异。在我的情况下,它是:

C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\lib\x64\

将库放置在此目录中允许Visual Studio在生成过程中查找并链接它。
1.更新您的货物.toml:
在Rust项目的Cargo.toml文件中,确保您已将库正确指定为依赖项。它应该看起来像这样:

[dependencies]
# Other dependencies

1.构建Rust项目:
有了Packet.lib库,并在Cargo.toml中指定了正确的路径,您应该能够构建Rust项目而不会遇到LNK1181错误:

cargo build --target x86_64-pc-windows-msvc

请确保调整命令和路径以匹配您的特定设置。
通过遵循这些步骤,您应该能够解决LNK1181错误并成功编译具有WinPcap库依赖项的Rust项目。

相关问题