如何在Windows上使用Qt Creator导出并链接到dll

How do I export and link to a dll using Qt Creator on Windows?

本文关键字:链接 dll Creator Qt Windows      更新时间:2023-10-16

我在Mac上构建了一些Qt项目,目前我正在尝试在Windows上构建相同的代码。在这些项目中,有一个dll(称为LibraryA)导出一个类(称为ClassA),该类由第二个dll(也称为LibraryB)链接。

我有以下代码,根据所使用的编译器定义要使用的dll导出代码。

#ifdef _MSC_VER
    #if defined(LIBRARY_A)
        #define LIBRARY_A_EXPORT __declspec(dllexport)
    #else
        #define LIBRARY_A_EXPORT __declspec(dllimport)
    #endif
#else
    #define LIBRARY_A_EXPORT
#endif

然后,我将其合并到我的类定义中。

class LIBRARY_A_EXPORT ClassA

然而,在Windows上,我在LibraryB中得到了未解析的符号__declspec(dllimport)。

我做错了什么?

EDIT我创建了几个独立的项目来尝试实现这一点(再次称为LibraryA和LibraryB)。LibraryA成功构建,在LibraryB项目中,我使用了"添加库"对话框,选择了外部库。这给了我以下.pro文件条目,这些条目仍然不能正常工作

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../build-LibraryA-Desktop_Qt_5_5_1_MSVC2013_64bit-Debug/release/ -lLibraryA
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../build-LibraryA-Desktop_Qt_5_5_1_MSVC2013_64bit-Debug/debug/ -lLibraryA
INCLUDEPATH += $$PWD/../build-LibraryA-Desktop_Qt_5_5_1_MSVC2013_64bit-Debug/debug
DEPENDPATH += $$PWD/../build-LibraryA-Desktop_Qt_5_5_1_MSVC2013_64bit-Debug/debug

我看到了一些可能的场景:

  1. LibraryA.dll丢失(未生成)。可能不是这样
  2. LibraryB找不到LibraryA。确保LibraryB"pro"文件中有正确的库路径:LIBS += -L$$PWD/Path_To_LibraryA_Dll/ -lLibraryA
  3. LibraryA项目没有定义LIBRARY_A宏,LIBRARY_A_EXPORT也没有定义为__declspec(dllexport),在这种情况下,LibraryA不会导出任何内容供外部使用。确保您在LibraryA"pro"文件中有定义:DEFINES += LIBRARY_A

有一个很好的Qt wiki:如何使用Qt创建库并在应用程序中使用它。注意在声明中使用Q_DECL_EXPORTQ_DECL_IMPORT,具体取决于项目,无论它是使用还是提供动态库。