【发布时间】:2014-11-06 17:31:11
【问题描述】:
将 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”,即使在定义文件中提到了?
【问题讨论】:
标签: c++ gcc directx-11