在我的项目中,我有一组我想加载延迟的DLL,即首次使用而不是进程启动时。 这意味着我想对某些DLL(而不是Qt本身)使用MSVC链接器的/ DELAYLOAD标志(参见[1]以获得更多解释)。 原因是一些用户在DLL启动期间遇到崩溃(我们无法重现)。 以前的非Qt版本的软件没有这个问题,但它使用延迟加载,所以这可能会产生影响。
使用QMake,我发现无法延迟加载工作。有没有人知道如何将/ DELAYLOAD传递给msvc链接器,使用qmake功能绕过qmake?
[1] http://www.codeproject.com/KB/DLL/Delay_Loading_Dll.aspx
答案 0 :(得分: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及更高版本中使用。
答案 1 :(得分:2)
您应该能够将其添加到QMAKE_LFLAGS变量之一,例如QMAKE_LFLAGS_RELEASE。这将在项目文件中,该文件负责将您的dll链接到您的应用程序(可能是创建最终应用程序的那个)。
像
这样的东西win32 {
QMAKE_LFLAGS_RELEASE+=/DELAYLOAD:MyDll.dll
}
应该有用。