与 Rust 中的本机库链接时将符号公开给动态链接器

Expose symbols to dynamic linker when linking with native library in Rust

我正在用 Rust 构建一个二进制可执行文件,它需要 link 到本地库,比如 foo.afoo.a 包含一个符号 void bar(void),我想将其作为回调函数公开给动态 linker,可以由 dlopen 样式动态加载的函数调用图书馆。

如果我们使用 C 来源,这可以通过提供 -rdynamicld 中完成。

gcc -rdynamic -o a_dynamic main.c foo.c

在 Rust 中执行此操作的正确方法是什么?我试过在 build.rs 中使用 cargo:rustc-flags=-rdynamic,以及

#![feature(link_args)]
#[link_args = "-rdynamic"]

似乎都不起作用。

截至今天,Rust 工具链不鼓励将任意标志传递给链接器。我们最接近的正确方法是使用 cargo rustc 并手动添加链接参数。

cargo rustc -- -C link-args='-rdynamic'