構建Rust二進制文件(可執行文件或dylib)時,在Cargo.toml
中配置的版本信息對構建的二進制文件沒有影響,這意味着配置的版本不存儲在二進制文件中。有沒有辦法將版本信息存儲在Rust編譯的可執行文件或庫中?
在Linux中,當我使用readelf -V
一個.so文件,你可以看到支持的接口(SO名稱)存儲在「.gnu.version_d」 ELF文件的的版本定義部分。例如,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
輸出用於生鏽或貨物產生dylib或可執行沒有這樣的版本信息。 Cargo.toml
中的版本配置僅由crates.io使用。
而且,Windows DLL支持存儲版本信息,而不是像Linux那樣的SONAME接口版本名稱。交叉編譯的Windows DLL也沒有版本信息。也許這是另一個問題,但我想我先在這裏提出這一點。
據[交叉張貼到reddit(https://www.reddit.com/r/rust/comments/3zi8xh/no_rust_version_info_stored_in_dylib_dynamic_link /) –
@Shepmaster,再次感謝您的編輯:) –