gpt4 book ai didi

c++ - 为 GCC 创建正确的 D3D11 库文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:42:11 25 4
gpt4 key购买 nike

将 DirectX SDK 中提供的 d3d11.lib 等文件转换为 *.a GCC 库格式的正确方法是什么?我尝试了将 *.lib 文件转换为 *.a 文件的常用 reimp 方法,但它似乎不起作用。

第一步涉及创建一个定义文件:

bin\reimp -d d3d11.lib

假设我想使用该库中应提供的 D3D11CreateDevice 函数。如果我打开创建的定义文件,一切似乎都正常:

LIBRARY "d3d11.dll"
EXPORTS
(...)
D3D11CreateDevice
D3D11CreateDeviceAndSwapChain
(...)

接下来我尝试使用定义文件和原始 lib 文件创建 *.a 文件:

bin\dlltool -v -d d3d11.def -l libd3d11.a

这实际上产生了一个有效的库(当 dlltool 设置为详细时没有错误消息),但是如果我尝试使用应该在其中实现的函数 D3D11CreateDevice,我得到一个错误:

undefined reference to `D3D11CreateDevice'

如果我问 nm 库中有什么符号(并使用 grep 进行过滤),我会得到:

D:\Tools\LIB2A>bin\nm libd3d11.a | grep D3D11CreateDevice
File STDIN:
00000000 I __imp__D3D11CreateDeviceAndSwapChain
00000000 T _D3D11CreateDeviceAndSwapChain
00000000 I __imp__D3D11CreateDevice
00000000 T _D3D11CreateDevice

imp函数是调用DLL内部D3D11CreateDevice实际实现的函数。但是,该实际实现现在带有下划线前缀。

为什么定义文件中提到了“_D3D11CreateDevice”而“D3D11CreateDevice”却没有定义?

最佳答案

只是做:

复制 d3d11.lib libd3d11.a

或者,您可以在 GCC 命令行上使用 X:\path\to\d3d11.lib 而不是 -ld3d11。 Windows 上的 GNU 实用程序使用与 Microsoft 工具使用的相同的 PECOFF 存档格式。

关于c++ - 为 GCC 创建正确的 D3D11 库文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26722643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com