与 GMP 相关的 macOS 上的 Rust 编译错误

Rust compile error on macOS related to GMP

类似

use super::gmp::mpz::Mpz;
...
pub type MyMPZ = Mpz;

...

fn a() -> Option<MyMPZ>;

它(连同许多其他 Rust 文件、库和其他依赖项)在 Ubuntu 甚至 Windows 上编译并且 运行s OK,但在 macOS Mojave 上 我得到

expected struct `gmp::mpz::Mpz`, found enum `std::option::Option`

note: expected type `&gmp::mpz::Mpz`
                                                      found type `&std::option::Option`

我用 Brew 安装了 GMP,但我用自己构建的 GMP 6.1.2 尝试了相同的结果。

更新 1: 似乎 MCVE 没有多大意义,因为我在同一根目录中有两个完全相同的项目副本,如 root\example1 和 root\example2。一个副本构建正常,另一个给出错误消息。多次尝试 cargo clean 等,效果相同。

更新二: 似乎这绝对是某种缓存问题。因为当我构建依赖项时,他们从 C:\Users\<userName>\.rustup\toolchains\nightly-i686-pc-windows-msvc\lib\rustlib\i686-pc-windows-msvc\lib 中获取自定义构建的 gmp.lib 的 32 位版本。因此,如果我检查依赖项并单独构建它 - 在那里测试 运行。如果我构建整个项目,并使用我自己的构建依赖包作为 .lib,我在某个时候得到

expected struct `gmp::mpz::Mpz`, found another struct `gmp::mpz::Mpz`

对我来说,这似乎是 GMP 32/64 位库的混合。

好吧,这就是 cargo dependency hell:) - 在多次重新安装、清理等不成功之后,我终于能够通过手动下载、重建和重新引用 git 引用的依赖项的本地路径来重建.从那时起 - 无论我是在本地还是通过 git 或 crates.

引用,一切都很好