【发布时间】:2017-05-01 01:05:29
【问题描述】:
我正在尝试从 Rust 可执行文件中导出符号:
#[allow(non_upper_case_globals)]
#[no_mangle]
pub static exported_symbol: [u8; 1] = *b"\0";
fn main() {
println!("Hello, world!");
}
exported_symbol 似乎没有被生成的二进制文件导出:
$ cargo build
$ nm ./target/debug/test_export| grep exported_symbol
另一方面,如果我使用相同的源构建一个库,则该符号确实会被导出:
$ rustc --crate-type cdylib src/main.rs
$ nm libmain.so| grep exported_symbol
0000000000016c10 R exported_symbol
我在 Linux x86-64 上使用 Rust 1.18.0。
【问题讨论】:
-
为什么可执行文件要导出符号?
-
我希望它模拟一个加载插件的现有 C 二进制文件,部分接口是二进制文件使插件可以使用符号。
-
Rust 1.17 是当前的稳定版本,如果您使用的是 1.18,您可能应该包含 beta / nightly date 和 git hash。
标签: rust