我的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)定义中。
class LIBRARY_A_EXPORT ClassA

但是,在Windows上,我在LibraryB中得到了无法解析的符号__declspec(dllimport)。

我做错了什么?

编辑我创建了几个独立的项目来尝试使它正常工作(再次称为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

最佳答案

我看到一些可能的情况:

  • LibraryA.dll丢失(未生成)。可能不是这样。
  • LibraryB无法找到LibraryA。确保在LibraryB'pro'文件中具有正确的库路径:LIBS += -L$$PWD/Path_To_LibraryA_Dll/ -lLibraryA
  • LibraryA项目没有定义LIBRARY_A宏,并且LIBRARY_A_EXPORT也没有定义为__declspec(dllexport),在这种情况下,LibraryA不会导出任何内容供外部使用。确保在LibraryA'pro'文件中具有定义:DEFINES += LIBRARY_A
  • 关于c++ - 如何在Windows上使用Qt Creator导出并链接到dll?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34663527/

    10-09 07:22