彻底系统重弄(Linux Kernel Driver)前置重写条件
sudo apt-get install bear llvm clang clang-tools gcc cmake make git wget curl -y
C2Rust规定👇
apt install build-essential llvm clang libclang-dev cmake libssl-dev pkg-config python3 git -y
intercept-build make
apt install python3-pip -y
warning: be sure to add /root/.cargo/bin
to your PATH to be able to run the installed binaries
cargo install
命令会将二进制文件安装到 ~/.cargo/bin
目录下,但是如果这个目录没有被添加到系统的 PATH 环境变量中,那么在终端中就无法直接运行这些命令。
你可以通过修改你的 shell 配置文件(取决于你的默认 shell,可能是 .bashrc
, .bash_profile
, 或者 .zshrc
等)来永久地添加这个路径到你的 PATH 环境变量中。对于 bash 或者 zsh 用户,你可以添加以下内容:
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc
对于 zsh 用户,需要更改 .bashrc
为 .zshrc
:
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.zshrc
完成后,你需要让这个修改生效,可以通过运行以下命令:
source ~/.bashrc
或者,对于 zsh:
source ~/.zshrc
你也可以通过重新打开你的终端来使这个修改生效。
在添加完 PATH 之后,你应该能够直接运行 c2rust
了。
四个arguments
-mfunction-return=thunk-extern
: 这个选项在编译器中是用来设置函数返回类型的。thunk-extern
指定了一种特殊的函数返回机制,这种机制是在 GCC 8.0 以后版本中引入的,用于优化函数的返回。但这种机制在某些版本的 clang 编译器中可能不受支持,导致出现了错误信息。-fzero-call-used-regs=used-gpr
: 这个编译选项是在函数调用后将所有使用过的通用寄存器清零,这对于增加安全性有帮助,特别是对于防止密码等敏感信息泄露有一定作用。这个选项在某些版本的 clang 编译器中可能不受支持。-fconserve-stack
: 这个编译选项用来指导编译器在生成代码时尽量减少栈的使用。这在栈空间非常有限的环境中可能非常有用,例如在嵌入式系统或内核代码中。然而,这个选项在 clang 编译器中可能不受支持。-mrecord-mcount
: 这个编译选项是在内核构建过程中用来插入特殊的函数指令,以支持动态追踪技术。在这个指令的帮助下,内核可以记录函数调用的情况。然而,这个选项在 clang 编译器中可能不受支持。
总的来说,这些编译选项可能是 GCC 特有的,而 clang 并不全部支持,因此你在使用 clang 编译时出现了错误。解决方法可能包括升级你的 clang 版本,或者更换为 GCC 编译器。
cargo build -Z
是一个只能在 Rust 的夜间(nightly)版本上使用的参数
这个错误信息告诉你 -Z
是一个只能在 Rust 的夜间(nightly)版本上使用的参数,但是你当前正在使用的是稳定版(stable)。-Z
参数可以用来开启一些还在实验阶段的功能。
为了能够使用 -Z
参数,你需要切换到 Rust 的夜间版本。这可以通过 rustup
这个 Rust 版本管理工具来实现。如果你还没有安装 rustup
,你可以通过以下命令安装:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
然后,你可以通过以下命令切换到 Rust 的夜间版本:
rustup default nightly
现在你应该能够使用 -Z
参数了。请注意,由于夜间版本包含的是一些实验性的功能,因此它可能不如稳定版那么稳定