Rust 如何为库指定macOS部署目标?

Rust 如何为库指定macOS部署目标?,rust,rust-cargo,Rust,Rust Cargo,我正在为macOS构建一个AU音频插件,它链接到一个使用Cargo编译的静态Rust库。我通过CMake编译插件,macOS部署目标设置为10.9。在链接时,我会遇到很多错误,比如 ld:warning:对象文件(my/rust/libfoo.a(std-bd716fa574aff005.std.8vdpzfpj-cgu.15.rcgu.o))是为比链接(10.9)更新的macOS版本(10.15)构建的 运行MacOS 10.13的测试人员确认加载插件会导致崩溃 我还需要为macOS部署目标

我正在为macOS构建一个AU音频插件,它链接到一个使用Cargo编译的静态Rust库。我通过CMake编译插件,macOS部署目标设置为10.9。在链接时,我会遇到很多错误,比如

ld:warning:对象文件(my/rust/libfoo.a(std-bd716fa574aff005.std.8vdpzfpj-cgu.15.rcgu.o))是为比链接(10.9)更新的macOS版本(10.15)构建的
运行MacOS 10.13的测试人员确认加载插件会导致崩溃

我还需要为macOS部署目标10.9编译Rust库,但是我该如何做到呢

我正在编译的库是resvg,我修改了projects
Cargo.toml
,以便在我自己的fork中输出一个静态库,您可以找到

我调用
cargo build--release
,然后编译我的静态库

运行

otool-libresvg.a | rg LC | u VERSION | u MIN | u MACOSX-A2 | sort | uniq
输出

cmdsize 16
版本10.15
版本10.7
x86和x86_64目标的锈蚀(aarch64目标的锈蚀为11.0):

%cargo新建--lib演示
%cd演示
%echo“[lib]”>>Cargo.toml
%echo'板条箱类型=[“staticlib”]>>Cargo.toml
%取消设置MACOSX_部署_目标
%货物建造
#旧版本的macOS和/或x86和x86_64
%otool-l target/debug/libdemo.a | rg LC | u VERSION | u MIN | u MACOSX-A2 | rg VERSION | sort | uniq-c
198版本10.7
#macOS和/或aarch64的更新版本
%otool-l target/debug/libdemo.a | rg LC | u BUILD | u VERSION-A4 | rg minos | sort | uniq-c
通过指定
MACOSX\u部署\u目标
环境变量,您可以选择支持较新版本:

%export MACOSX\u DEPLOYMENT\u TARGET=10.12
%货物清洁和货物建造
%otool-l target/debug/libdemo.a | rg LC | u VERSION | u MIN | u MACOSX-A2 | rg VERSION | sort | uniq-c
2版本10.12
196版本10.7

如果您需要针对10.7以上的版本,我希望您必须重新编译Rust标准库本身。

创建一个全新的静态库,并使用
otool-l target/debug/libdemo.a | rg LC_VERSION | MIN|u MACOSX-A2 | sort | uniq
对其进行调查,结果表明它是
VERSION 10.7
。请提供一个示例,演示您的版本有何不同。感谢您的提示,我编辑了原始帖子。我调用了
货物构建--发布版
-我猜CMake正在为您设置环境变量,但设置的值是错误的。执行一些CMake调试以查看环境变量的实际情况。在调用
cargo
之前,可能需要编写一个脚本,将环境变量转储到文件中。构建库不是CMake构建过程的一部分,而是在shell脚本中执行一次。我将脚本更新为输出到unset
MACOSX_DEPLOYMENT_TARGET
,它生成了一个库,现在生成的链接器错误至少更少。然而,链接器仍然会为Skia符号抛出很多错误(resvg库本身包含一个条带化版本的Skia),因此这对于这个库来说确实是一个非常特殊的问题。因此,我将在resvg GitHub repository上创建一个问题。以这种方式构建演示程序将正确编译部署目标为10.7的静态库,因此这似乎是我试图构建的库所特有的