我正在尝试将一些旧的MSVC C++代码移植到MinGW/GCC。
其中一个问题是该项目在不总是使用某些函数,且正确的dll在运行时才能找到时,大量依赖于/DelayLoad选项。
在MinGW/GCC中是否有类似的选项?
此代码针对Windows平台。
我正在尝试将一些旧的MSVC C++代码移植到MinGW/GCC。
其中一个问题是该项目在不总是使用某些函数,且正确的dll在运行时才能找到时,大量依赖于/DelayLoad选项。
在MinGW/GCC中是否有类似的选项?
此代码针对Windows平台。
我想补充一点,尽管延迟加载DLL似乎是Windows操作系统的一部分,但它们实际上是由链接器生成的小存根来实现的。至少以前是这样的。因此,在Windows操作系统级别上没有正式的“延迟加载”概念。这是一种基于链接器生成的二进制代码约定。
-z lazy
使得符号解析被延迟,但共享库总是被加载。/DELAYLOAD
启用延迟链接,即延迟加载库直到其中一个函数被调用(Solaris 拥有此功能,但它并未出现在 Glibc 中,因为 Drepper^W^W 由于某种原因)。 - yugr--output-delaylib
参数来创建延迟加载的导入库。然后,您可以链接到生成的导入库以延迟加载DLL。version.dll
,它导出了GetFileVersionInfoSizeW
,则可以通过以下方式进行懒加载。首先,在version.def
文件中定义我们要调用的函数:EXPORTS
GetFileVersionInfoSizeW
dlltool
创建一个延迟加载的导入库:dlltool --input-def version.def --output-delaylib version.lib --dllname version.dll
version.lib
文件:gcc -o test test.c -lversion -L .
QueryOptionalDelayLoadedAPI
。 - MSalters