You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust可执行文件中导出DirectX Agility SDK所需符号

解决Rust中导出DX Agility SDK所需符号的问题

要让DirectX Agility SDK正确加载,你需要导出D3D12SDKVersion和D3D12SDKPath两个符号,并且确保Windows链接器将它们包含在可执行文件的导出表中。你当前的代码缺少两个关键部分:完整的符号定义,以及告诉链接器导出符号的配置。

1. 补全符号定义代码

首先,你需要同时定义官方要求的两个静态符号,D3D12SDKPath需要是一个以null结尾的空字符串:

#[used]
#[no_mangle]
#[export_name = "D3D12SDKVersion"]
pub static D3D12_SDK_VERSION: u32 = 711; // 对应SDK版本1.711.3-preview

#[used]
#[no_mangle]
#[export_name = "D3D12SDKPath"]
pub static D3D12_SDK_PATH: &[u8] = b"\0"; // 空路径字符串,必须以null结尾

2. 配置链接器导出符号

Windows链接器默认不会导出可执行文件中的符号,必须显式指定要导出的符号。你可以通过两种方式配置:

方式一:修改Cargo.toml

在Cargo.toml中添加目标特定的rustflags,传递链接器参数:

[target.x86_64-pc-windows-msvc]
rustflags = [
    "-C", "link-args=/EXPORT:D3D12SDKVersion",
    "-C", "link-args=/EXPORT:D3D12SDKPath",
]

# 如果需要支持32位,添加以下配置
[target.i686-pc-windows-msvc]
rustflags = [
    "-C", "link-args=/EXPORT:D3D12SDKVersion",
    "-C", "link-args=/EXPORT:D3D12SDKPath",
]

方式二:使用build.rs脚本

在项目根目录创建build.rs文件,通过构建脚本动态传递链接器参数:

fn main() {
    // 告诉链接器导出指定符号
    println!("cargo:rustc-link-args=/EXPORT:D3D12SDKVersion");
    println!("cargo:rustc-link-args=/EXPORT:D3D12SDKPath");
}

3. 验证导出结果

重新构建项目后,使用dumpbin工具检查可执行文件的导出表:

dumpbin /exports target/release/your_project.exe

你应该能在输出中看到D3D12SDKVersion和D3D12SDKPath两个符号。

内容的提问来源于stack exchange,提问作者Julien Russo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 20:12:38