如何在不调用其中一个函数的情况下 link C 库?

How to link a C library without calling one of its functions?

我想 link 和 -lm。现在,我是这样做的:

let _link_lm = f64::sin(3.0);

我试着把这个放在 .cargo/config:

[build]
rustflags = ["-C", "link-args=-lm"]

这不是动态 link 库。 此外,在构建脚本中使用 cargo:rustc-link-lib=m 与调用 cargo rustc -- -lm 相同,但两者均无效。 我检查库是否未 link 编辑 ldd

它对 link 库很重要,因为这是用于 JIT 编译器的,它可以通过使用 dlsym.

获取这些函数来调用它们

如何在不调用其中一个函数的情况下 link 访问该库?

事实证明 rustc 使用 -Wl,--as-needed 调用链接器,所以我的解决方案是禁用此选项:

[build]
rustflags = ["-C", "link-arg=-Wl,--no-as-needed", "-C", "link-arg=-lm"]