在与 Rust 中的本机库链接时将符号公开给动态链接器
Posted
技术标签:
【中文标题】在与 Rust 中的本机库链接时将符号公开给动态链接器【英文标题】:Expose symbols to dynamic linker when linking with native library in Rust 【发布时间】:2015-12-04 07:00:04 【问题描述】:我正在用 Rust 构建一个二进制可执行文件,它需要链接到一个本地库,比如 foo.a
。 foo.a
包含一个符号 void bar(void)
,我想将它作为一个回调函数公开给动态链接器,该函数可以被 dlopen
风格的动态加载库中的函数调用。
如果我们使用C
源,这可以通过提供-rdynamic
在ld
中完成。
gcc -rdynamic -o a_dynamic main.c foo.c
在 Rust 中这样做的正确方法是什么?我曾尝试在build.rs
中使用cargo:rustc-flags=-rdynamic
,以及
#![feature(link_args)]
#[link_args = "-rdynamic"]
似乎都不起作用。
【问题讨论】:
只是一个疯狂的猜测 - 使用cargo:rustc-flags=-C link-args=-rdynamic
。链接器的参数通过 rustc 中的-C link-args
选项传递。
@VladimirMatveev 试过了。没有运气。
【参考方案1】:
截至今天,Rust 工具链不鼓励将任意标志传递给链接器。我们可以做的最接近的正确方法是使用cargo rustc
并手动添加链接参数。
cargo rustc -- -C link-args='-rdynamic'
【讨论】:
以上是关于在与 Rust 中的本机库链接时将符号公开给动态链接器的主要内容,如果未能解决你的问题,请参考以下文章