通常,当我们链接到dll时,也必须使用.lib,以便链接程序可以知道它是动态链接。 但是,在Qt Creator中,我们可以不用它。
我按照youtube上的说明进行操作,我的过程很简单,如下所示:
INCLUDEPATH += "C:\Users\***\Desktop\Brand New\CMakeStuff\include\qmsgpack" LIBS += "C:\Users\***\Desktop\Brand New\CMakeStuff\bin\TestMessagePack.dll"
没有步骤2,链接器将失败。 显而易见,Qt Creator可以链接到不带.lib的dll。 但是,如果没有.lib文件,链接器如何知道?
我需要了解其中的原理
答案 0 :(得分:1)
您正在使用各种MinGW之一? GCC的Windows端口。在Windows上,
GCC工具链的链接器(ld
)支持DLL的直接链接,这与Microsoft链接器不同
这需要代理.lib
导入库。 Documentation:
直接链接到dll
ld的cygwin / mingw端口支持直接链接到dll,包括数据符号,而无需使用任何导入库。
...
还有MinGW: Specify the libraries for the linker to use
除了* nix系统上常见的常规“ lib.a”约定外,MinGW还支持根据“ .lib”和“ .dll”约定命名的库。
...
这种行为是由MingGW提供的?您正在使用的链接器。这意味着动态库与ld
的链接可以在Windows上以与不存在导入库的类Unix操作系统相同的方式进行。 Qt不相关。