我如何通过观察windows计算机来确定要编译到哪个rust目标?

w8f9ii69  于 2022-11-12  发布在  Windows
关注(0)|答案(1)|浏览(134)

我正在编译一个rust应用程序,它将被静态链接,然后放置在一个外部服务器上。我应该查找什么设置、配置或表来找到正确的编译目标?对于大多数现代的windows服务器和计算机,x86_64-pc-windows-msvc应该工作得很好,但我想知道是否有更具体的方法来解决这个问题。
Here the rustup docs提到了windows安装和注意事项,但没有提到如何弄清楚目标。

ztmd8pv5

ztmd8pv51#

请尝试转到您正在为其构建的系统并运行echo %PROCESSOR_ARCHITECTURE%。这将为我们提供有关CPU体系结构的信息,以帮助我们做出决定。
根据win32文档,它的值将是AMD64IA64ARM64x86。这些值与可用的windows rust目标对齐。我可以通过运行rustup target list并查找名称中包含windows的目标来找到所有的rust目标。下面是我的机器上的输出:

$ rustup target list | grep windows
aarch64-pc-windows-msvc
i586-pc-windows-msvc
i686-pc-windows-gnu
i686-pc-windows-msvc
x86_64-pc-windows-gnu
x86_64-pc-windows-msvc

对于PROCESSOR_ARCHITECTURE的值,我们可以或多或少地通过谷歌搜索它们来估计哪个是哪个。

  • AMD64:这只是x86_64的另一个名称,因此我们需要使用x86_64-pc-windows-msvcx86_64-pc-windows-gnu
  • IA64:¯*()*/¯ Rust是建立在LLVM之上的。IA64已经到了它的生命周期,没有多少硬件使用它,所以LLVM decided not to support this architecture。我认为gcc可能确实支持它,但是我们已经不太幸运了,当我们使用Rust的时候。
  • ARM64:这对应于aarch64体系结构,因此我们应该使用aarch64-pc-windows-msvc
  • x86:这实际上意味着我们在32位模式下运行,因此我们需要选择i686-pc-windows-msvci686-pc-windows-gnu

至于i586-pc-windows-msvc,它指的是旧的I5奔腾架构。它应该兼容较新的i686x86_64架构,但可能会或可能不会作为性能。我会避免它,除非你是工作与旧的硬件和需要兼容性。我也假设它将不兼容windows 11由于新的64位要求。
至于msvcgnu之间的区别,你可以选择。我想msvc会更容易使用,但我还没有尝试过使用gnu版本。

相关问题