如何在Windows上使用Qt Creator导出并链接到dll
How do I export and link to a dll using Qt Creator on Windows?
我在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
我看到了一些可能的场景:
- 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
有一个很好的Qt wiki:如何使用Qt创建库并在应用程序中使用它。注意在声明中使用Q_DECL_EXPORT
和Q_DECL_IMPORT
,具体取决于项目,无论它是使用还是提供动态库。
相关文章:
- Windows 链接器是否使用 LoadLibrary 解析 DLL 中未定义的符号?
- 优化链接的 DLL
- 如何链接 DLL 以供 LoadLibrary() 使用(在 Windows 上的 C++ 中)并从调用 exe 导入变
- 不能使用隐式链接.dll中的类
- 显式链接 DLL 和类方法
- 哪种方法更好获取静态链接DLL的模块句柄(HMODULE) - 使用GetModuleHandleEx()或LoadLibrary()?
- 在QtCreator中链接dll的未定义引用错误
- 如何在qt中链接dll
- 在虚幻4插件中链接DLL
- 我们可以动态链接 DLL 的不同方法是什么
- 如果使用LoadLibrary显式链接dll,则列出从PE文件导入的函数
- 静态链接.dll和cmake/qt创建者?
- 当显式动态链接dll时,使用std::unique_lock会破坏XP的兼容性
- 导出:使用c++链接DLL
- 使用xerces链接DLL会给出未定义的符号
- Visual Studio中的链接dll
- 链接DLL时命令行错误
- 如何链接.dll库与c++ VS项目
- 设置显式链接DLL的内部变量
- LNK 2019试图链接DLL和EXE