DLL – 有没有办法将版本信息存储在Rust编译的可执行文件或库中
发布时间:2020-12-14 02:51:12 所属栏目:Windows 来源:网络整理
导读:构建Rust二进制文件(可执行文件或dylib)时,Cargo.toml中配置的版本信息对构建的二进制文件没有影响,这意味着配置的版本不会存储在二进制文件中. 在Linux中,当我使用readelf -V作为.so文件时,您可以看到支持的接口(SO Name)存储在ELF文件的Version definition
构建Rust二进制文件(可执行文件或dylib)时,Cargo.toml中配置的版本信息对构建的二进制文件没有影响,这意味着配置的版本不会存储在二进制文件中.
在Linux中,当我使用readelf -V作为.so文件时,您可以看到支持的接口(SO Name)存储在ELF文件的Version definition部分’.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 Rust或Cargo生成的dylib或可执行文件的readelf -V输出没有此类版本信息. Cargo.toml中的版本配置仅由crates.io使用. 此外,Windows DLL支持存储版本信息,而不是像Linux那样的SONAME接口版本名称.交叉编译的Windows DLL也没有版本信息.也许这是另一个问题,但我想我先提出这个问题. 解决方法
虽然我认为没有立即使用ELF工具进行版本控制的方法(它们不是跨平台的),但可以使用Cargo的版本信息:
const VERSION: &'static str = env!("CARGO_PKG_VERSION"); 现在,VERSION将等于运行货物构建时清单中指定的版本.或者,如果要在没有Cargo的情况下构建程序,可以使用env_opt!(): const VERSION: Option<&'static str> = env_opt!("CARGO_PKG_VERSION"); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容