6

在我的项目中,我有一组要延迟加载的 DLL,即在首次使用时而不是在进程启动时加载。这意味着我想对某些 DLL(而不是 Qt 本身)使用 MSVC 链接器的 /DELAYLOAD 标志(有关更多说明,请参见 [1])。原因是某些用户在 DLL 初始化期间遇到崩溃(我们无法重现)。该软件以前的非 Qt 版本没有这个问题,但它使用了延迟加载,所以这可能会有所不同。

使用 QMake,我发现没有办法让延迟加载工作。有谁知道如何将 /DELAYLOAD 传递给 msvc 链接器,在绕过 qmake 时使用 qmake 功能?

[1] http://www.codeproject.com/KB/DLL/Delay_Loading_Dll.aspx

4

2 回答 2

4

修改 .pro 文件:

## Make delayed load possible. If your project is itself a DLL which uses xxx.dll, you
## also need to include this line in the applications that use your DLL.
LIBS += DelayImp.lib

## Specify that xxx.dll loading needs to be delayed
win32:CONFIG(release, debug|release) {
    QMAKE_LFLAGS_RELEASE += /DELAYLOAD:xxx.dll
} else:win32:CONFIG(debug, debug|release) {
    QMAKE_LFLAGS_DEBUG += /DELAYLOAD:xxx.dll
}

我将 Qt5.1.1 与 MSVC 2012 一起使用,但根据 MS,这应该适用于 VC2005 及更高版本。

于 2013-10-11T08:37:37.947 回答
2

您应该能够将其添加到 QMAKE_LFLAGS 变量之一,例如 QMAKE_LFLAGS_RELEASE。这将在负责将您的 dll 链接到您的应用程序(可能是创建最终应用程序的那个)的项目文件中。

就像是

win32 {
    QMAKE_LFLAGS_RELEASE+=/DELAYLOAD:MyDll.dll
}

应该管用。

于 2010-08-17T11:00:41.467 回答