构建Rust二进制文件(可执行文件或dylib)时,其中配置的版本信息Cargo.toml
对所构建的二进制文件无效,这意味着配置的版本未存储在二进制文件中。
在Linux中,当我使用readelf -V
.so文件时,可以看到支持的接口(SO名称)存储在ELF文件的版本定义部分'.gnu.version_d'下。例如,输出readelf -V /lib/libnss_files-2.12.so
:
Version definition section '.gnu.version_d' contains 2 entries: Addr: 0x0000000000001540 Offset: 0x001540 Link: 5 (.dynstr) 000000: Rev: 1 Flags: BASE Index: 1 Cnt: 1 Name: libnss_files.so.2 0x001c: Rev: 1 Flags: none Index: 2 Cnt: 1 Name: GLIBC_PRIVATE
该/lib/libnss_files-2.12.so
文件正在实现接口版本libnss_files.so.2
readelf -V
Rust或Cargo生成的dylib或可执行文件的输出不包含此类版本信息。版本配置中Cargo.toml
仅由crates.io使用。
而且,Windows DLL支持存储版本信息,而不是像Linux这样的SONAME接口版本名称。交叉编译的Windows DLL也没有版本信息。也许这是另一个问题,但我想我首先要提出一点。