【问题标题】:Linking Qt in a dynamic library在动态库中链接 Qt
【发布时间】:2009-07-21 22:34:47
【问题描述】:

我有一个运行良好的动态库,我想在其中使用 QObject。包含“qobject.h”标头后,我编译一切都很好。但是当我尝试声明一个 QObject 时,编译器总是给我一个“找不到标识符”的错误。我尝试对 QObject 类进行声明,但没有帮助。这很奇怪,因为当我在我的 dll 中使用 Qt 时,visual studio 的智能感知正在工作(例如:当我声明一个 QObject 时,visual sdio 向我显示了我的 QObject 可用的函数)。在动态库中使用 Qt 有什么特别需要做的吗?既然我使用的是 QObject,我是否必须使用 qmake 编译它?

感谢您的帮助

戴夫

编辑:问题似乎只在我包含 stdafx.h 后出现。如果我尝试在 Stdafx.h 之后包含 Qt 标头,我的库将无法编译,从而出现语法错误。如果我在包含 Stdafx.h 之前使用 Qt 引用,它可以编译并运行良好,但它有点没用,因为我无法在现有代码中使用 Qt 引用。

1>c:\users\dave\documents\visual studio 2008\projects\frogger\froggerdll\ftclient.cpp(47) : error C2653: 'QWidget' : is not a class or namespace name
1>c:\users\dave\documents\visual studio 2008\projects\frogger\froggerdll\ftclient.cpp(47) : error C3861: 'find': identifier not found

有问题的行是 QWidget::find(hwnd); 我包括 QWidget

【问题讨论】:

    标签: qt dynamic visual-c++


    【解决方案1】:

    你在VS和Qt之间安装了integration吗?我相信你需要(代替使用 qmake)应用程序和库。至于 stdafx 问题,我想您可能在该标头和 qobject 之间遇到了冲突的宏(但是如果我没看错,您可以通过按此顺序包含它们来绕过该问题,首先是 qobject,然后是 stdafx - 是对吗?)。 [[显然不是,根据 OP 的最新评论]]。

    编辑:如果您使用的是 Qt 4.5 的 LGPL 版本,则有关使 VS/Qt 集成工作的一些说明是 here - 否则我相信集成产品是商业产品. (如果您不迫切需要 Visual Studio 的某些特定方面,您也可以改用 Qt Creator 来简化您的生活,但我确实意识到 VS 及其底层 C++ 编译器在其他方面可能更可取)。

    【讨论】:

    • 我可以绕过它,通过以正确的顺序包含它们,但是我不能使用 QObject,所以它并不能真正解决我的问题。我会尝试安装集成。有什么特别的步骤我必须采取的,或者在那之后它应该可以编译吗?
    • 我认为“编译并运行良好”的意思就是——也许你想再次编辑你的问题以澄清它不是。我正在编辑我的答案以添加指向集成说明的指针。
    • 我尝试按照上述说明安装集成,但仍然遇到相同的错误
    猜你喜欢
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 2016-03-12
    相关资源
    最近更新 更多