未定义的引用 - 我包含正确的标题

时间:2013-01-11 07:41:41

标签: qt plugins

我正在尝试从ProjectExplorer :: ProjectExplorerPlugin继承,但是我收到有关未定义引用的错误。任何想法如何解决它?

class MyPluginPlugin : public ProjectExplorer::ProjectExplorerPlugin
{
    Q_OBJECT
    ...
};

错误:未定义引用` imp __ ZN15ProjectExplorer21ProjectExplorerPluginC2Ev'

2 个答案:

答案 0 :(得分:2)

您没有收到编译错误,但是未定义的引用通常意味着您的项目知道头文件的位置,但它不知道库包含已编译的源代码的位置。< / p>

我从来没有为Qt Creator编写插件,但我已经快速浏览了它的源代码结构,我看到了以下选项:


选项A)

Qt Creator的来源projectexplorer.pro下有src/plugins/projectexplorer个文件。您可以手动构建该项目以获取ProjectExplorer.lib(加上.dll或.a)然后引用此库。
示例:假设库将与其.pro创建在同一目录中文件(我不知道是不是这样)并且您使用src/plugins/myplugin下的Qt Creator源创建了您的插件,您可以像这样定义LIBS变量:

LIBS += -L../projectexplorer \
        -lProjectExplorer

第一行添加“../projectexplorer”作为附加库目录,第二行添加“ProjectExplorer”作为库来搜索任何已定义的目录(它会自动添加特定于操作系统的文件扩展名,如.lib在windows等)。

显然,如果您的项目或图书馆位于其他地方,您需要相应地更改第一行。


选项B)

您可以使用projectexplorerHEADERS变量将SOURCES目录的源文件和头文件包含到您自己的.pro文件中。我不确定这是否会干扰任何其他插件(包括projectexplorer本身)。


选项C)

可能有一种方法可以包含projectexplorer.pro文件,以便您拥有一个主项目,该项目首先构建项目资源管理器库,然后构建您自己的插件。这将是最安全的方法,因为它确保在您自己的项目与之链接之前构建Project Explorer库并使其保持最新状态。 但是我对此的经验有限。

如果有人阅读此内容可以对此选项进行详细说明,请随时编辑或提供自己的答案。

答案 1 :(得分:1)

如果您使用的Qt Creator是在2013年4月之后使用Commit: #66a3553 - make library and plugin dependencies declarative编写的源代码构建的,那么您只需在.pro文件中指定插件的依赖项:

# myplugin.pro
QTC_PLUGIN_DEPENDS += \
    coreplugin \
    projectexplorer