我正在尝试从 ProjectExplorer::ProjectExplorerPlugin 子类化,但我收到错误消息告诉我未定义的引用。任何想法如何解决它?
class MyPluginPlugin : public ProjectExplorer::ProjectExplorerPlugin
{
Q_OBJECT
...
};
错误:未定义对` imp __ZN15ProjectExplorer21ProjectExplorerPluginC2Ev'的引用
您没有收到编译错误但未定义引用的事实通常意味着您的项目知道头文件在哪里,但它不知道包含已编译源代码的库在哪里。
我从未为 Qt Creator 编写过插件,但我快速浏览了它的源代码结构,我看到了以下选项:
选项 A)
projectexplorer.pro
Qt Creator 的源代码中有一个文件位于src/plugins/projectexplorer
. 您可以手动构建该项目以获得 ProjectExplorer.lib(加上 .dll 或 .a),然后引用此库。
示例:假设库将创建在与其 .pro 文件相同的目录中(我不知道是否是这样),并且您使用 Qt Creator 的源代码在 下创建了插件src/plugins/myplugin
,您将LIBS
像这样定义变量:
LIBS += -L../projectexplorer \
-lProjectExplorer
第一行添加“../projectexplorer”作为附加库目录,第二行添加“ProjectExplorer”作为库以在任何定义的目录中搜索(它会自动添加特定于操作系统的文件扩展名,如 Windows 上的 .lib 等)。
显然,如果您的项目或库位于其他地方,则需要相应地更改第一行。
选项 B)
您可以使用和变量将目录的源文件和头文件包含projectexplorer
到您自己的 .pro 文件中。我不确定这是否不会干扰任何其他插件(包括 projectexplorer 本身)。HEADERS
SOURCES
选项 C)
可能有一种方法可以包含该projectexplorer.pro
文件,以便您拥有一个主项目,该项目首先构建项目资源管理器库,然后构建您自己的插件。这将是最安全的方法,因为它可以确保在您自己的项目链接到它之前构建 Project Explorer 库并且是最新的。但是我在这方面的经验有限。
如果阅读本文的任何人都可以对此选项进行详细解释,请随时编辑或提供您自己的答案。
如果您使用的是从 2013 年 4 月之后编码的源代码构建的 Qt Creator,其中包括Commit: #66a3553 - make library and plugin dependencies declarative,那么您可以简单地在其 .pro 文件中为您的插件指定依赖项:
# myplugin.pro
QTC_PLUGIN_DEPENDS += \
coreplugin \
projectexplorer